diff --git a/build.gradle b/build.gradle
index e60f773..464e7cf 100644
--- a/build.gradle
+++ b/build.gradle
@@ -25,6 +25,7 @@
 
 dependencies {
     implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
+    implementation 'org.springframework.boot:spring-boot-starter-tomcat'
     implementation 'org.springframework.boot:spring-boot-starter-data-redis'
     implementation 'org.springframework.boot:spring-boot-starter-web'
     implementation 'org.springframework.boot:spring-boot-starter-security'
diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 5bbedd3..f4d1f18 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -5,7 +5,7 @@
 spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
 # Postgresql settings
 spring.datasource.platform=postgresql
-spring.datasource.url=jdbc:postgresql://172.28.201.70:15432/payapi
+spring.datasource.url=jdbc:postgresql://172.28.201.70:15432/restaurant
 spring.datasource.username=payapi
 spring.datasource.password=123456
 database.dbtype=postgresql
diff --git a/src/main/java/com/supwisdom/dlpay/area/bean/AreaSearchBean.java b/src/main/java/com/supwisdom/dlpay/area/bean/AreaSearchBean.java
new file mode 100644
index 0000000..b3c4509
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/area/bean/AreaSearchBean.java
@@ -0,0 +1,16 @@
+package com.supwisdom.dlpay.area.bean;
+
+import com.supwisdom.dlpay.system.bean.PageBean;
+
+public class AreaSearchBean extends PageBean {
+    private String areaname;
+
+    public String getAreaname() {
+        return areaname;
+    }
+
+    public void setAreaname(String functioname) {
+        this.areaname = functioname;
+    }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/area/controller/AreaController.java b/src/main/java/com/supwisdom/dlpay/area/controller/AreaController.java
new file mode 100644
index 0000000..4c4baf1
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/area/controller/AreaController.java
@@ -0,0 +1,90 @@
+package com.supwisdom.dlpay.area.controller;
+
+
+import com.google.gson.Gson;
+import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.area.bean.AreaSearchBean;
+import com.supwisdom.dlpay.area.domain.TArea;
+import com.supwisdom.dlpay.area.service.AreaService;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.WebConstant;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Controller
+@RequestMapping("/area")
+public class AreaController {
+
+    @Autowired
+    private AreaService areaService;
+
+    @RequestMapping("/index")
+    public String indexView(ModelMap model) {
+        List<TArea> lst = areaService.findAll();
+        Map<Integer, String> map = new HashMap<>();
+        for (TArea area : lst) {
+            map.put(area.getId(), area.getAreaname());
+        }
+        Gson gson = new Gson();
+        String gsonString = gson.toJson(map);
+        model.put("areaList", gsonString);
+        return "area/index";
+    }
+
+    @RequestMapping("/list")
+    @PreAuthorize("hasPermission('/area/index','')")
+    @ResponseBody
+    public PageResult<TArea> 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;
+            AreaSearchBean searchBean = new AreaSearchBean();
+            searchBean.setPageNo(pageNo);
+            searchBean.setAreaname(searchKey);
+            searchBean.setPageSize(pageSize);
+            return areaService.getAreaByKey(searchBean);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+
+    @GetMapping("/loadadd")
+    @PreAuthorize("hasPermission('/area/loadadd','')")
+    public String loadadd(Model model) {
+        List<TArea> list = areaService.findAll();
+        model.addAttribute("arealist", list);
+        return "area/form";
+    }
+
+    @PostMapping("/add")
+    @PreAuthorize("hasPermission('/area/add','')")
+    @ResponseBody
+    public JsonResult add(@RequestBody TArea area) {
+        System.out.println(area);
+        if (area != null) {
+            return areaService.saveArea(area);
+        } else {
+            return JsonResult.error("添加失败");
+        }
+    }
+
+    @PostMapping("/delete")
+    @PreAuthorize("hasPermission('/area/delete','')")
+    @ResponseBody
+    public JsonResult delfunc(@RequestParam Integer id) {
+        return areaService.deleteArea(id);
+    }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/area/dao/AreaDao.java b/src/main/java/com/supwisdom/dlpay/area/dao/AreaDao.java
new file mode 100644
index 0000000..0b7a308
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/area/dao/AreaDao.java
@@ -0,0 +1,17 @@
+package com.supwisdom.dlpay.area.dao;
+
+
+import com.supwisdom.dlpay.area.domain.TArea;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface AreaDao extends JpaRepository<TArea, Integer> {
+
+
+    Page<TArea> findAllByAreanameContaining(String name, Pageable pageable);
+
+    TArea findByAreaname(String areaname);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/area/domain/TArea.java b/src/main/java/com/supwisdom/dlpay/area/domain/TArea.java
new file mode 100644
index 0000000..2148783
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/area/domain/TArea.java
@@ -0,0 +1,85 @@
+package com.supwisdom.dlpay.area.domain;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_AREA")
+@SequenceGenerator(name="SEQ_AREA",sequenceName="SEQ_AREA",allocationSize=1)
+public class TArea  {
+
+    private Integer id;
+    private String areaname;
+    private Integer fid;
+    private Integer arealevel;
+    private String addr;
+    private String remark;
+
+    @Id
+    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_AREA")
+    @Column(name = "id", unique = true, nullable = false, length = 8)
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer areacode) {
+        this.id = areacode;
+    }
+
+
+    @Column(name = "AREANAME", length = 60)
+    public String getAreaname() {
+        return this.areaname;
+    }
+
+    public void setAreaname(String areaname) {
+        this.areaname = areaname;
+    }
+
+    @Column(name = "fid",  length = 8)
+    public Integer getFid() {
+        return fid;
+    }
+
+    public void setFid(Integer fid) {
+        this.fid = fid;
+    }
+
+    @Column(name = "AREALEVEL", precision = 9, scale = 0)
+    public Integer getArealevel() {
+        return this.arealevel;
+    }
+
+    public void setArealevel(Integer arealevel) {
+        this.arealevel = arealevel;
+    }
+
+    @Column(name = "ADDR", length = 240)
+    public String getAddr() {
+        return this.addr;
+    }
+
+    public void setAddr(String addr) {
+        this.addr = addr;
+    }
+
+    @Column(name = "REMARK", length = 240)
+    public String getRemark() {
+        return this.remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "TArea{" +
+                "id=" + id +
+                ", areaname='" + areaname + '\'' +
+                ", fid=" + fid +
+                ", arealevel=" + arealevel +
+                ", addr='" + addr + '\'' +
+                ", remark='" + remark + '\'' +
+                '}';
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/area/service/AreaService.java b/src/main/java/com/supwisdom/dlpay/area/service/AreaService.java
new file mode 100644
index 0000000..9bee95d
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/area/service/AreaService.java
@@ -0,0 +1,26 @@
+package com.supwisdom.dlpay.area.service;
+
+import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.area.bean.AreaSearchBean;
+import com.supwisdom.dlpay.area.domain.TArea;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+public interface AreaService {
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
+    PageResult<TArea> getAreaByKey(AreaSearchBean param);
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
+    List<TArea> findAll();
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    JsonResult saveArea(TArea area);
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    JsonResult deleteArea(Integer id);
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/area/service/impl/AreaServiceImpl.java b/src/main/java/com/supwisdom/dlpay/area/service/impl/AreaServiceImpl.java
new file mode 100644
index 0000000..6b19406
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/area/service/impl/AreaServiceImpl.java
@@ -0,0 +1,55 @@
+package com.supwisdom.dlpay.area.service.impl;
+
+import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.area.bean.AreaSearchBean;
+import com.supwisdom.dlpay.area.dao.AreaDao;
+import com.supwisdom.dlpay.area.domain.TArea;
+import com.supwisdom.dlpay.area.service.AreaService;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class AreaServiceImpl implements AreaService {
+    @Autowired
+    private AreaDao areaDao;
+
+    @Override
+    public PageResult<TArea> getAreaByKey(AreaSearchBean param) {
+        Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize()
+                , Sort.by("id"));
+        if (!StringUtil.isEmpty(param.getAreaname())) {
+            return new PageResult<>(areaDao.findAllByAreanameContaining(param.getAreaname(), pageable));
+        }
+        return new PageResult<>(areaDao.findAll(pageable));
+    }
+
+    @Override
+    public List<TArea> findAll() {
+        return areaDao.findAll();
+    }
+
+    @Override
+    public JsonResult saveArea(TArea area) {
+       /* TArea temp = areaDao.findByAreaname(area.getAreaname());
+        if (temp != null) {
+            return JsonResult.error("地区名重复");
+        }*/
+        area.setArealevel(2);
+
+        areaDao.save(area);
+        return JsonResult.ok("成功");
+    }
+
+    @Override
+    public JsonResult deleteArea(Integer id) {
+        areaDao.deleteById(id);
+        return JsonResult.ok("成功");
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/shopmanagement/ShopManageController.java b/src/main/java/com/supwisdom/dlpay/shopmanagement/ShopManageController.java
new file mode 100644
index 0000000..3fcc576
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/shopmanagement/ShopManageController.java
@@ -0,0 +1,223 @@
+package com.supwisdom.dlpay.shopmanagement;
+
+import com.supwisdom.dlpay.api.bean.JsonResult;
+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.security.OperUtil;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.framework.util.WebConstant;
+import com.supwisdom.dlpay.system.bean.LogBean;
+import com.supwisdom.dlpay.system.bean.OperatorSearchBean;
+import com.supwisdom.dlpay.system.service.OperatorService;
+import com.supwisdom.dlpay.system.service.RoleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+
+@Controller
+@RequestMapping("/shop")
+public class ShopManageController {
+    @Autowired
+    private OperatorService operatorService;
+    @Autowired
+    private RoleService roleService;
+
+    @GetMapping("/index")
+    @PreAuthorize("hasPermission('/operator/index','')")
+    public String indexView(Model model) {
+        System.out.println("here is index");
+        return "system/operator/index";
+    }
+
+    @GetMapping("/list")
+    @ResponseBody
+    public PageResult<TOperator> getDataList(@RequestParam("page") Integer pageNo,
+                                             @RequestParam("limit") Integer pageSize,
+                                             @RequestParam(value = "searchkey", required = false) String searchKey,
+                                             @RequestParam(value = "searchvalue", required = false) String searchValue) {
+        try {
+
+            if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+            if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+            OperatorSearchBean searchBean = new OperatorSearchBean();
+            if (!StringUtil.isEmpty(searchValue)) {
+                if ("opercode".equals(searchKey)) {
+                    searchBean.setOpercode(searchValue.trim());
+                } else if ("opername".equals(searchKey)) {
+                    searchBean.setOpername(searchValue.trim());
+                } else if ("mobile".equals(searchValue.trim())) {
+                    searchBean.setMobile(searchValue.trim());
+                }
+            }
+            return operatorService.getOperatorsByPage(pageNo, pageSize, searchBean);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+    @GetMapping("/load4add")
+    @PreAuthorize("hasPermission('/operator/load4add','')")
+    public String load4addOperator(Model model) {
+        model.addAttribute("roles", roleService.findAllRoles());
+        return "system/operator/operator";
+    }
+
+    @GetMapping("/checkopercode")
+    @ResponseBody
+    public JsonResult checkOpercode(@RequestParam("opercode") String opercode,
+                                    @RequestParam(value = "operid", required = false) String operid) {
+        if (operatorService.checkOpercodeExists(opercode, operid)) {
+            return JsonResult.error("账号重复");
+        }
+        return JsonResult.ok("success");
+    }
+
+    @PostMapping("/getoperatorrole")
+    @ResponseBody
+    public JsonResult getoperatorrole(@RequestParam(value = "operid") String operid) {
+        List<TOperRole> roles = operatorService.getOperRoleByOperId(operid);
+        JsonResult ret = JsonResult.ok("success");
+        ret.put("roles", roles);
+        return ret;
+    }
+
+    @PostMapping("/add")
+    @PreAuthorize("hasPermission('/operator/add','')")
+    @ResponseBody
+    public JsonResult add(@RequestParam("operid") String operid, @RequestParam("opercode") String opercode,
+                          @RequestParam("opername") String opername, @RequestParam("sex") String sex,
+                          @RequestParam("mobile") String mobile, @RequestParam("email") String email,
+                          @RequestParam("roleId") String roleId, Model map) {
+        if (operatorService.checkOpercodeExists(opercode, operid)) {
+            return JsonResult.error("账号重复");
+        }
+        TOperator operator = new TOperator();
+        operator.setOpername(opername);
+        operator.setOpercode(opercode);
+        operator.setOperid(operid);
+        operator.setMobile(mobile);
+        operator.setEmail(email);
+        operator.setSex(sex);
+        boolean ret = operatorService.saveOperator(operator, roleId);
+        if (ret) {
+            return JsonResult.ok("操作成功");
+        } else {
+            return JsonResult.error("操作失败");
+        }
+    }
+
+    @PostMapping("/resetpwd")
+    @PreAuthorize("hasPermission('/operator/resetpwd','')")
+    @ResponseBody
+    public JsonResult resetpwd(@RequestParam("operid") String operid) {
+        if (operatorService.resetPwd(operid)) {
+            return JsonResult.ok("操作成功，密码重置为123456");
+        } else {
+            return JsonResult.error("操作失败");
+        }
+    }
+
+    @PostMapping("/updatestate")
+    @PreAuthorize("hasPermission('/operator/updatestate','')")
+    @ResponseBody
+    public JsonResult updatestate(@RequestParam("operid") String operid, @RequestParam("state") String state) {
+        if (operatorService.updateState(operid, state)) {
+            return JsonResult.ok("操作成功");
+        } else {
+            return JsonResult.error("操作失败");
+        }
+    }
+
+    @GetMapping("/logs")
+    public String logs() {
+        return "system/operator/logs";
+    }
+
+    @GetMapping("/logslist")
+    @PreAuthorize("hasPermission('/operator/logslist','')")
+    @ResponseBody
+    public PageResult<TOperLog> logslist(@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;
+            LogBean searchBean = new LogBean();
+            searchBean.setPageNo(pageNo);
+            searchBean.setOpername(searchKey);
+            searchBean.setPageSize(pageSize);
+            return operatorService.getOperLogs(searchBean);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+    @GetMapping("/userinfor")
+    public String userinfor(ModelMap map) {
+        TOperator operator = OperUtil.getCurrentOper();
+        if(operator!=null){
+            operator = operatorService.getOperatorByCode(operator.getOpercode());
+        }
+        map.put("user", operator);
+        return "system/operator/userinfor";
+    }
+
+    @PostMapping("/updateinfor")
+    @ResponseBody
+    public JsonResult updateinfor(@RequestBody TOperator oper) {
+        TOperator operator = OperUtil.getCurrentOper();
+        if (oper != null) {
+            operator.setSex(oper.getSex());
+            operator.setOpername(oper.getOpername());
+            operator.setEmail(oper.getEmail());
+            operator.setMobile(oper.getMobile());
+            operatorService.saveOperator(operator);
+        }
+        return JsonResult.ok("操作成功");
+    }
+
+    @GetMapping("/setpwd")
+    public String setpwd(ModelMap map) {
+        return "system/operator/setpwd";
+    }
+
+    @PostMapping("/dosetpwd")
+    @ResponseBody
+    public JsonResult dosetpwd(@RequestParam String curpwd,
+                               @RequestParam String newpwd, @RequestParam String renewpwd) {
+        if (StringUtil.isEmpty(curpwd)
+                || StringUtil.isEmpty(newpwd)
+                || StringUtil.isEmpty(renewpwd)) {
+            return JsonResult.error("参数粗错误");
+        }
+        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
+        String encpwd = encoder.encode(curpwd);
+        TOperator operator = OperUtil.getCurrentOper();
+        if (operator == null) {
+            return JsonResult.error(401, "登录已过期，请重新登录");
+        }
+        if (!encoder.matches(curpwd,operator.getPassword())) {
+            return JsonResult.error("当前密码错误");
+        }
+        if (!newpwd.equals(renewpwd)) {
+            return JsonResult.error("两次密码不一致");
+        }
+        if(newpwd.length()<6||newpwd.length()>20){
+            return JsonResult.error("密码6~20个字符");
+        }
+        operator.setOperpwd(encoder.encode(newpwd));
+        operatorService.saveOperator(operator);
+        return JsonResult.ok("密码修改成功，请重新登录");
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java b/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
index dc0ef57..3b57620 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
@@ -33,6 +33,7 @@
     @GetMapping("/index")
     @PreAuthorize("hasPermission('/operator/index','')")
     public String indexView(Model model) {
+        System.out.println("here is index");
         return "system/operator/index";
     }
 
diff --git a/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt
index 56f2586..17e6ca9 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt
@@ -36,7 +36,7 @@
         try {
             return Manifests.read("Payapi-Version") ?: "version 1.0"
         } catch (ex: Exception) {
-//            ex.printStackTrace()
+            ex.printStackTrace()
             return "unknown"
         }
     }
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 4c33b78..c1ec200 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -26,3 +26,29 @@
 ################################################
 # user password
 auth.password.bcrypt.length=10
+
+
+
+##
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
+spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
+# Postgresql settings
+spring.datasource.platform=postgresql
+spring.datasource.url=jdbc:postgresql://172.28.201.70:15432/restaurant
+spring.datasource.username=payapi
+spring.datasource.password=123456
+database.dbtype=postgresql
+# Redis settings
+redis.server=172.28.201.101
+redis.port=16379
+redis.password=kingstar
+redis.database=0
+# jwt settings
+jwt.secret=Zj5taLomEbrM0lk+NMQZbHfSxaDU1wekjT+kiC3YzDw=
+# timeout seconds
+jwt.expiration=3600
+auth.password.bcrypt.seed=
+spring.jackson.serialization.fail-on-empty-beans=false
+
+
+
diff --git a/src/main/resources/db/migration/V1.0__init_data.sql b/src/main/resources/db/migration/V1.0__init_data.sql
index 0d0cc5e..8e765df 100644
--- a/src/main/resources/db/migration/V1.0__init_data.sql
+++ b/src/main/resources/db/migration/V1.0__init_data.sql
@@ -1,37 +1,139 @@
-insert into tb_apiclient(appid, secret, status, roles)
-values ('100001', 'oUw2NmA09ficiVWD4TUQLDOkPyzQa3VzbjjsW0B2qTk=', 'normal', 'ROLE_THIRD_ADMIN');
-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,PARENTID,NAME,ORDERNUM,MENUURL,MENUICON,ISLEAF)
---values ('1','-1','系统中心',1,'#','layui-icon-set',0);
---Insert into TB_FUNCTION (ID,PARENTID,NAME,ORDERNUM,MENUURL,MENUICON,ISLEAF)
---values ('2','1','管理员维护',1,'#','layui-icon-set',1);
-
---Insert into TB_ROLE_FUNCTION (ID,FUNCTIONID,ROLEID) values ('1','1','d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
---Insert into TB_ROLE_FUNCTION (ID,FUNCTIONID,ROLEID) values ('2','2','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 ('4',null,1,null,'layui-icon-set','/operator/index','管理员维护',1,'3');
-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_apiclient" VALUES ('200001', 'ROLE_THIRD_CONSUME,ROLE_THIRD_COMMON', 'oUw2NmA09ficiVWD4TUQLDOkPyzQa3VzbjjsW0B2qTk=', 'normal');
+INSERT INTO "tb_apiclient" VALUES ('100001', 'ROLE_THIRD_ADMIN', 'oUw2NmA09ficiVWD4TUQLDOkPyzQa3VzbjjsW0B2qTk=', 'normal');
 
 
-Insert into TB_ROLE_FUNCTION (ID,FUNCTIONID,ROLEID) values ('5','5','d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-Insert into TB_ROLE_FUNCTION (ID,FUNCTIONID,ROLEID) values ('1','1','d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-Insert into TB_ROLE_FUNCTION (ID,FUNCTIONID,ROLEID) values ('2','2','d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-Insert into TB_ROLE_FUNCTION (ID,FUNCTIONID,ROLEID) values ('3','3','d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-Insert into TB_ROLE_FUNCTION (ID,FUNCTIONID,ROLEID) values ('4','4','d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_function" VALUES (1, NULL, 0, NULL, 'layui-icon-home', '#', '主页', 1, -1);
+INSERT INTO "tb_function" VALUES (2, NULL, 1, NULL, 'layui-icon-home', '/home/console', '控制台', 1, 1);
+INSERT INTO "tb_function" VALUES (3, NULL, 0, NULL, 'layui-icon-set', '#', '系统中心', 2, -1);
+INSERT INTO "tb_function" VALUES (5, NULL, 1, NULL, 'layui-icon-set', '/role/index', '角色管理', 2, 3);
+INSERT INTO "tb_function" VALUES (6, NULL, 1, NULL, 'layui-icon-set', '/operator/index', '操作员管理', 4, 3);
+INSERT INTO "tb_function" VALUES (4, NULL, 1, NULL, 'layui-icon-set', '/function/index', '功能维护', 1, 3);
+INSERT INTO "tb_function" VALUES (7, NULL, 0, NULL, 'layui-icon-release', '#', '商户中心', 4, -1);
+INSERT INTO "tb_function" VALUES (9, NULL, 1, NULL, '', '/operator/logs', '操作日志', 4, 3);
+INSERT INTO "tb_function" VALUES (10, NULL, 0, NULL, 'layui-icon-util', '#', '参数管理', 3, -1);
+INSERT INTO "tb_function" VALUES (11, NULL, 1, NULL, 'layui-icon-util', '/param/syspara', '全局参数配置', 1, 10);
+INSERT INTO "tb_function" VALUES (12, NULL, 1, NULL, 'layui-icon-util', '/param/businesspara', '业务参数配置', 2, 10);
+INSERT INTO "tb_function" VALUES (17, NULL, 1, NULL, 'layui-icon-util', '/param/apiclientpara', '应用参数配置', 3, 10);
+INSERT INTO "tb_function" VALUES (18, NULL, 1, NULL, 'layui-icon-util', '/param/paytype', '支付能力配置', 4, 10);
+INSERT INTO "tb_oper_role" VALUES ('2c9cab836a90185f016a901b005f001b', '402882816a8fe884016a8fe8c0530000', '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_oper_role" VALUES ('ff8080816aaf2ec3016aaf30c1b60007', 'LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_oper_role" VALUES ('ff8080816ab96daf016ab9743dc60050', '2c9cab836a9666e0016a96694bbb0004', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_operator" VALUES ('2c9cab836a9666e0016a96694bbb0004', NULL, '', '', '20190508', 'test1', 'test1', '$2a$10$lkfzdX.0ioX9FU2BmPzHz.tv2DTR8XvaZzA0vpkEYV5vx/IDtIsGy', 'oper', 'normal', 'male');
+INSERT INTO "tb_operator" VALUES ('402882816a8fe884016a8fe8c0530000', NULL, '', '', '20190507', 'test', '11112', '$2a$10$Xa/UKDQ/WkiKVQAyv5Hu4eiqt6HtwVK3YA0Glg1/y1uiEsXnG7ZeS', 'oper', 'normal', 'male');
+INSERT INTO "tb_operator" VALUES ('LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', '20500101', '', '', '20190101', 'system', '系统管理员', '$2a$10$Ex9xp11.vCaD8D0a7ahiUOKqDij1TcCUBwRAmrqXeDvAkmzLibn4.', 'oper', 'normal', 'male');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518160054', 16, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518160055', 17, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518160056', 19, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518160057', 20, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518160058', 21, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba451816005a', 6, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba451816005b', 7, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba451816005c', 8, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba451816005d', 9, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba451816005e', 22, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518170060', 4, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518170061', 5, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518170062', 10, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518170063', 11, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518170064', 12, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518170065', 13, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518170066', 14, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518180067', 15, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518180069', 24, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba451819006d', 27, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba451819006e', 26, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518190070', 28, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518190071', 29, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518190072', 30, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518190073', 33, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518190074', 32, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba4518190076', 34, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba45181a0077', 35, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba45181a0078', 37, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba45181a0079', 36, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba45181a007a', 39, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba45181a007b', 40, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aba2931016aba45181b007d', 41, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa80085', 16, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa80086', 17, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa90087', 19, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa90088', 20, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa90089', 21, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa9008b', 6, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa9008c', 7, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa9008d', 8, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa9008e', 9, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa9008f', 22, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa90091', 4, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0092', 5, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0093', 10, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0094', 11, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0095', 12, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0096', 13, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0097', 14, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0098', 15, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa009a', 24, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaab009e', 26, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaac009f', 27, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_resource" VALUES (4, '1', 4, '添加功能', '/function/add');
+INSERT INTO "tb_resource" VALUES (5, '', 4, '添加父功能', '/function/loadadd');
+INSERT INTO "tb_resource" VALUES (6, '1', 6, '查询', '/operator/index');
+INSERT INTO "tb_resource" VALUES (7, '', 6, '添加查询', '/operator/load4add');
+INSERT INTO "tb_resource" VALUES (8, '', 6, '添加和修改', '/operator/add');
+INSERT INTO "tb_resource" VALUES (9, '', 6, '重置密码', '/operator/resetpwd');
+INSERT INTO "tb_resource" VALUES (10, '', 4, '查询', '/function/index');
+INSERT INTO "tb_resource" VALUES (11, '', 4, '删除', '/function/delfunc');
+INSERT INTO "tb_resource" VALUES (12, '', 4, '添加子功能', '/function/loadsubadd');
+INSERT INTO "tb_resource" VALUES (13, '', 4, '维护资源', '/function/loadres');
+INSERT INTO "tb_resource" VALUES (14, '', 4, '添加资源', '/function/addres');
+INSERT INTO "tb_resource" VALUES (15, '', 4, '删除资源', '/function/delres');
+INSERT INTO "tb_resource" VALUES (16, '', 5, '查询', '/role/index');
+INSERT INTO "tb_resource" VALUES (17, '', 5, '添加', '/role/add');
+INSERT INTO "tb_resource" VALUES (19, '', 5, '分配功能', '/role/addfunc');
+INSERT INTO "tb_resource" VALUES (20, '', 5, '加载分配功能', '/role/loadfunc');
+INSERT INTO "tb_resource" VALUES (21, '', 5, '删除角色', '/role/del');
+INSERT INTO "tb_resource" VALUES (22, '', 6, '修改状态', '/operator/updatestate');
+INSERT INTO "tb_resource" VALUES (24, '', 9, '查询', '/operator/logslist');
+INSERT INTO "tb_resource" VALUES (26, '', 11, '修改', '/param/sysparaupdate');
+INSERT INTO "tb_resource" VALUES (27, '', 11, '查询', '/param/syspara');
+INSERT INTO "tb_resource" VALUES (28, '', 12, '查询', '/param/businesspara');
+INSERT INTO "tb_resource" VALUES (29, '', 12, '删除', '/param/deletebusinesspara');
+INSERT INTO "tb_resource" VALUES (30, '', 12, '修改', '/param/businessparaupdate');
+INSERT INTO "tb_resource" VALUES (32, '', 12, '新增', '/param/addbusinesspara');
+INSERT INTO "tb_resource" VALUES (33, '', 12, '新增跳转', '/param/load4addbuspara');
+INSERT INTO "tb_resource" VALUES (34, '', 17, '查询', '/param/apiclientpara');
+INSERT INTO "tb_resource" VALUES (35, '', 17, '新增修改跳转', '/param/load4addapiclient');
+INSERT INTO "tb_resource" VALUES (36, '', 17, '修改状态', '/param/updateapiclientstate');
+INSERT INTO "tb_resource" VALUES (37, '', 17, '删除', '/param/deleteapiclient');
+INSERT INTO "tb_resource" VALUES (39, '', 17, '修改', '/param/updateapiclientpara');
+INSERT INTO "tb_resource" VALUES (40, '', 17, '新增', '/param/addapiclientpara');
+INSERT INTO "tb_resource" VALUES (41, '', 18, '查询', '/param/paytype');
+INSERT INTO "tb_role" VALUES ('d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '20190101000000', 0, '', 'ROLE_ADMIN', '超级管理员', '超级管理员');
+INSERT INTO "tb_role" VALUES ('2c9cab836a8af5d5016a8af6ece20000', '20190506102639', 1, '', 'ROLE_ADMIN', '系统管理员', '系统管理员');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa80081', 1, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa80082', 2, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa80083', 3, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa80084', 5, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa9008a', 6, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa90090', 4, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaaa0099', 9, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaaa009b', 7, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaab009c', 10, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaab009d', 11, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aba2931016aba4518150050', 1, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aba2931016aba4518150051', 2, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aba2931016aba4518150052', 3, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aba2931016aba4518150053', 5, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aba2931016aba4518160059', 6, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aba2931016aba451817005f', 4, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aba2931016aba4518180068', 9, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aba2931016aba451818006a', 7, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aba2931016aba451818006b', 10, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aba2931016aba451818006c', 11, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aba2931016aba451819006f', 12, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aba2931016aba4518190075', 17, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function" VALUES ('ff8080816aba2931016aba45181b007c', 18, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
 
+INSERT INTO "tb_area" VALUES (1, '地区1', 1, '', 0, NULL);
 commit;
diff --git a/src/main/resources/db/migration/V1.1__init_paytype.sql b/src/main/resources/db/migration/V1.1__init_paytype.sql
index 0dfd06c..e618e16 100644
--- a/src/main/resources/db/migration/V1.1__init_paytype.sql
+++ b/src/main/resources/db/migration/V1.1__init_paytype.sql
@@ -1,5 +1,5 @@
 -- 支付方式
-Insert into TB_PAYTYPE (PAYTYPE,DPS_ENABLE,ENABLE,REVERSE_ENABLE) values ('yktpay','no','yes','yes');
+--Insert into TB_PAYTYPE (PAYTYPE,DPS_ENABLE,ENABLE,REVERSE_ENABLE) values ('yktpay','no','yes','yes');
 
 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');
diff --git a/src/main/resources/templates/area/form.html b/src/main/resources/templates/area/form.html
new file mode 100644
index 0000000..2bcc90d
--- /dev/null
+++ b/src/main/resources/templates/area/form.html
@@ -0,0 +1,118 @@
+<!-- operator表单弹窗 -->
+<form id="form" lay-filter="form" class="layui-form model-form">
+    <input name="id" id="id" type="hidden"/>
+    <div class="layui-form-item">
+        <label class="layui-form-label">区域名称</label>
+        <div class="layui-input-block">
+            <input name="areaname" placeholder="区域名不能重复" type="text" class="layui-input" maxlength="20"
+                   lay-verify="required|areaname" required/>
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="layui-form-label">父区域</label>
+        <div class="layui-input-block">
+            <select name="fid" id="fid" lay-verify="required">
+                <option th:each="area : ${arealist}" th:value="${area.id}">[[${area.areaname}]]</option>
+            </select>
+        </div>
+    </div>
+
+
+    <div class="layui-form-item">
+        <label class="layui-form-label">地址</label>
+        <div class="layui-input-block">
+            <input name="addr" placeholder="请输入" type="text" class="layui-input"/>
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="layui-form-label">备注</label>
+        <div class="layui-input-block">
+            <input name="remark" placeholder="请输入" type="text" class="layui-input"/>
+        </div>
+    </div>
+
+    <div class="layui-form-item model-form-footer">
+        <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+        <button class="layui-btn" lay-filter="form-submit" lay-submit id="submitbtn">保存</button>
+    </div>
+</form>
+
+<script>
+    layui.use(['layer', 'admin', 'form', 'formSelects'], function () {
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+        form.render('select');
+        form.render('radio');
+        /*form.verify({
+            "areaname": function (e) {
+                var msg = "";
+                $.ajax({
+                    type: "GET",
+                    url: '/area/checkname',
+                    async: false,
+                    data: {
+                        areaname: e,
+                    },
+                    success: function (result) {
+                        if (result.code != 200) {
+                            msg = result.msg;
+                        }
+                    },
+                    error: function (error) {
+                        msg = "请求服务器校验账号失败";
+                    }
+                });
+            }
+        });*/
+
+        var url = '/area/add';
+        // 回显user数据
+        var func = admin.getTempData('t_area');
+        if (func) {
+            $('input[name="id"]').attr('readonly', 'readonly');
+            form.val('form', func);
+        }
+        let fid = admin.getTempData("fid");
+        if (fid) {
+            form.val('form', {"fid": fid});
+        }
+        // 表单提交事件
+        form.on('submit(form-submit)', function (data) {
+            layer.load(2);
+            let token = $("meta[name='_csrf_token']").attr("value");
+            debugger
+            $.ajax({
+                type: "POST",
+                dataType: "json",
+                url: url,
+                headers: {
+                    'Accept': 'application/json',
+                    'Content-Type': 'application/json',
+                    'X-CSRF-TOKEN': token,
+                },
+                data: JSON.stringify(data.field),
+                success: function (result) {
+                    layer.closeAll('loading');
+                    if (result.code == 200) {
+                        layer.msg(result.msg, {icon: 1});
+                        admin.finishPopupCenter();
+                    } else if (result.code == 401) {
+                        layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('/login');
+                        }, 1000);
+                        return;
+                    } else {
+                        console.log('err:' + result.code);
+                        layer.msg(result.msg, {icon: 2});
+                    }
+                },
+                error: function () {
+                    layer.closeAll('loading');
+                    layer.msg("请求服务器失败！", {icon: 2});
+                }
+            });
+            return false;
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/area/index.html b/src/main/resources/templates/area/index.html
new file mode 100644
index 0000000..ed16a4c
--- /dev/null
+++ b/src/main/resources/templates/area/index.html
@@ -0,0 +1,152 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">区域维护</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">区域维护</a>
+          <a><cite>区域维护</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            搜索：
+            <input id="search-value" class="layui-input search-input" type="text" placeholder="输入功能名称"/>&emsp;
+            <button id="btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            </button>
+            <button id="btn-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>添加区域</button>
+        </div>
+        <table class="layui-table" id="table" lay-filter="table"></table>
+    </div>
+</div>
+<input hidden th:value="${areaList}" id="arealist">
+<script>
+
+    var rawlist=$("#arealist").val();
+    var arealist=JSON.parse(rawlist);
+    $(function () {
+        console.log(arealist);
+    });
+
+    layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+        let form = layui.form;
+        let table = layui.table;
+        let admin = layui.admin;
+
+        form.render('select');
+
+        // 渲染表格
+        table.render({
+            elem: '#table',
+            url: '/area/list',
+            page: true,
+            cols: [
+                [
+                    {field: 'id', title: '区域号', width: 80, fixed: 'left', sort: true},
+                    {field: 'areaname', title: '区域名称', sort: true},
+                    {
+                        field: 'arealevel',
+                        title: '区域级别',
+                        sort: true,
+                        width: 80,
+                        align: 'center',
+                        templet: function (item) {
+                            if (item.arealevel == 1) {
+                                return '<span class="layui-badge ">父</span>'
+                            } else if (item.arealevel == 2) {
+                                return '<span class="layui-badge layui-bg-green">子</span>'
+                            } else {
+                                return ''
+                            }
+                        }
+                    },
+                    {
+                        field: 'fid',
+                        title: '父区域',
+                        sort: true,
+                        width: 80,
+                        align: 'center',
+                        templet: function (item) {
+                            if (item.arealevel == 1) {
+                                return '0';
+                            } else if (item.arealevel == 2) {
+                                return arealist[item.fid];
+                            } else {
+                                return ''
+                            }
+
+                           // return areaList.get(item.id);
+                        }
+                    },
+                    {field: 'addr', sort: true, width: 80, title: '地址'},
+                    {field: 'remark', sort: true, width: 80, title: '注释'},
+                    {
+                        field: 'id', align: 'center', title: '操作', fixed: 'right', templet: function (item) {
+                            return ' <a class="layui-btn  layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a> ' +
+                                ' <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>'
+                        }
+                    }
+                ]
+            ]
+        });
+        // 搜索按钮点击事件
+        $('#btn-search').click(function () {
+            let key = $('#search-value').val();
+            table.reload('table', {where: {searchkey: key}, page: {curr: 1}});
+        });
+        $('#btn-add').click(function () {
+            showModel();
+        });
+        let showModel = function (data) {
+            let title = data ? '修改区域' : '添加区域';
+            admin.putTempData('t_area', data);
+            admin.popupCenter({
+                title: title,
+                path: '/area/loadadd',
+                finish: function () {
+                    table.reload('table', {});
+                }
+            });
+        };
+
+
+        // 工具条点击事件
+        table.on('tool(table)', function (obj) {
+            let data = obj.data;
+            let layEvent = obj.event;
+            console.log(data);
+            if (layEvent === 'edit') {
+                showModel(data);
+            } else if (layEvent === 'del') {
+                showDelete(data);
+            }
+        });
+        let showDelete = function (data) {
+            layer.confirm('确定要删除吗？', function (i) {
+                layer.close(i);
+                layer.load(2);
+                let token = $("meta[name='_csrf_token']").attr("value");
+                admin.go('/area/delete', {
+                    id: data.id,
+                    _csrf: token
+                }, function (data) {
+                    console.log(data.code);
+                    layer.closeAll('loading');
+                    if (data.code == 200) {
+                        layer.msg(data.msg, {icon: 1});
+                    } else if (data.code == 401) {
+                        layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('/login');
+                        }, 1000);
+                        return;
+                    } else {
+                        layer.msg(data.msg, {icon: 2});
+                    }
+                    table.reload('table', {});
+                }, function (ret) {
+                    console.log(ret);
+                    layer.closeAll('loading');
+                    layer.msg('请求失败了，请稍后再试', {icon: 2});
+                });
+            });
+        }
+    });
+</script>
