diff --git a/payapi/build.gradle b/payapi/build.gradle
index 18f9d7f..419a470 100644
--- a/payapi/build.gradle
+++ b/payapi/build.gradle
@@ -68,7 +68,7 @@
     implementation 'org.postgresql:postgresql:42.2.5'
     implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
     implementation 'com.jcabi:jcabi-manifests:1.1'
-    implementation 'org.bitbucket.b_c:jose4j:0.6.3'
+    implementation 'org.bitbucket.b_c:jose4j:0.6.5'
     implementation 'io.github.microutils:kotlin-logging:1.6.26'
     implementation 'org.slf4j:slf4j-parent:1.7.26'
     implementation 'com.github.penggle:kaptcha:2.3.2'
@@ -77,7 +77,7 @@
     implementation group: 'javax.servlet', name: 'jstl', version: '1.2'
     implementation group: 'taglibs', name: 'standard', version: '1.1.2'
     implementation group: 'commons-codec', name: 'commons-codec', version: '1.6'
-    implementation files('libs/ojdbc6.jar')
+//    implementation files('libs/ojdbc6.jar')
     implementation 'commons-dbcp:commons-dbcp:1.4'
 
     implementation project(':payapi-common')
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TShop.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TShop.java
index 49b5df7..74c3ba6 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TShop.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TShop.java
@@ -15,13 +15,16 @@
   private Integer shopid;
 
   @Column(name = "FSHOPID", precision = 9)
+  @NotNull
   private Integer fshopid;
 
   @Column(name = "SHOPNAME", length = 200)
+  @NotNull
   private String shopname;
 
-  @Column(name = "SHOPTYPE", precision = 1)
-  private Integer shoptype;
+  @Column(name = "SHOPTYPE", length = 30)
+  @NotNull
+  private String shoptype;
 
   @Column(name = "STATUS", length = 20)
   @NotNull
@@ -73,7 +76,7 @@
   public TShop() {
   }
 
-  public TShop(Integer fshopid, String shopname, Integer shoptype, String status, String shopaccno, String contactman, String idtype, String idno, String tel, String mobile, String email, String addr, String zipcode, String opendate, String closedate, String thirdUniqueIdenty) {
+  public TShop(Integer fshopid, String shopname, String shoptype, String status, String shopaccno, String contactman, String idtype, String idno, String tel, String mobile, String email, String addr, String zipcode, String opendate, String closedate, String thirdUniqueIdenty) {
     this.fshopid = fshopid;
     this.shopname = shopname;
     this.shoptype = shoptype;
@@ -124,11 +127,11 @@
     this.shopname = shopname;
   }
 
-  public Integer getShoptype() {
+  public String getShoptype() {
     return shoptype;
   }
 
-  public void setShoptype(Integer shoptype) {
+  public void setShoptype(String shoptype) {
     this.shoptype = shoptype;
   }
 
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Constants.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Constants.java
index 17dd6bc..46af8bb 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Constants.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Constants.java
@@ -8,4 +8,6 @@
   public static final String JWT_CLAIM_TENANTID = "tenantId";
   public static final String JWT_CLAIM_UID = "uid";
   public static final String JWT_CLAIM_AUTHORITIES = "authorities";
+  // 根商户ID
+  public static final Integer ROOT_SHOP_FID = 1;
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/bean/ZTreeNode.java b/payapi/src/main/java/com/supwisdom/dlpay/system/bean/ZTreeNode.java
index 61e122e..8a4c964 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/bean/ZTreeNode.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/bean/ZTreeNode.java
@@ -8,7 +8,7 @@
     private boolean checked;
     private boolean open;
 
-    private Integer shoptype; //商户类别，商户树用到
+    private String shoptype; //商户类别，商户树用到
     private String shopaccno; //商户账号
     private String iconSkin; //自定义图标
 
@@ -52,11 +52,11 @@
         this.checked = checked;
     }
 
-    public Integer getShoptype() {
+    public String getShoptype() {
         return shoptype;
     }
 
-    public void setShoptype(Integer shoptype) {
+    public void setShoptype(String shoptype) {
         this.shoptype = shoptype;
     }
 
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/ShopController.java b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/ShopController.java
index 9cc74c5..cb76283 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/ShopController.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/ShopController.java
@@ -4,6 +4,7 @@
 import com.supwisdom.dlpay.api.domain.TSourceType;
 import com.supwisdom.dlpay.api.domain.TShopSourceType;
 import com.supwisdom.dlpay.api.domain.TShopSourceTypeConfig;
+import com.supwisdom.dlpay.api.util.ShopTypes;
 import com.supwisdom.dlpay.framework.domain.TShop;
 import com.supwisdom.dlpay.framework.domain.TShopacc;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
@@ -13,6 +14,7 @@
 import com.supwisdom.dlpay.system.service.ParamService;
 import com.supwisdom.dlpay.system.service.ShopDataService;
 import com.supwisdom.dlpay.util.ConstantUtil;
+import com.supwisdom.dlpay.util.EnumCheck;
 import com.supwisdom.dlpay.util.WebCheckException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -35,6 +37,8 @@
   @Autowired
   private DictionaryProxy dictionaryProxy;
 
+  private EnumCheck<ShopTypes, String> shopTypeCheck = new EnumCheck<>();
+
   @GetMapping("/shop/index")
   public String shopView() {
     return "system/shop/index";
@@ -84,7 +88,7 @@
   @PreAuthorize("hasPermission('/shop/saveorupdate','')")
   @ResponseBody
   public JsonResult saveOrUpdateShop(@RequestParam("shopid") Integer shopid, @RequestParam("shopname") String shopname,
-                                     @RequestParam("fshopid") Integer fshopid, @RequestParam("shoptype") Integer shoptype,
+                                     @RequestParam("fshopid") Integer fshopid, @RequestParam("shoptype") String shoptype,
                                      @RequestParam(value = "contactman", required = false) String contactman,
                                      @RequestParam(value = "idtype", required = false) String idtype,
                                      @RequestParam(value = "idno", required = false) String idno,
@@ -93,7 +97,8 @@
                                      @RequestParam(value = "email", required = false) String email,
                                      @RequestParam(value = "addr", required = false) String addr,
                                      @RequestParam(value = "zipcode", required = false) String zipcode) {
-    if (null == shopid || StringUtil.isEmpty(shopname) || null == fshopid || (shoptype != 0 && shoptype != 1)) {
+    if (null == shopid || StringUtil.isEmpty(shopname) || null == fshopid
+        || !shopTypeCheck.isInEnums(shoptype, ShopTypes.NORMAL, ShopTypes.GROUP)) {
       return JsonResult.error("参数传递错误");
     }
 
@@ -115,7 +120,6 @@
       }
       shop.setFshopid(fshopid);
       shop.setShopname(shopname);
-//      shop.setShoptype(shoptype); //商户类型不能改
     }
     shop.setContactman(contactman == null ? null : contactman.trim());
     shop.setIdno(idno == null ? null : idno.trim());
@@ -125,7 +129,7 @@
     } else if (!StringUtil.isEmpty(shop.getIdno()) && "1".equals(shop.getIdtype()) && !StringUtil.isIdentity(shop.getIdno())) {
       return JsonResult.error("身份证格式错误！");
     }
-    shop.setMobile(mobile == null ? null : mobile);
+    shop.setMobile(mobile);
     if (!StringUtil.isEmpty(shop.getMobile()) && !StringUtil.isMobile(shop.getMobile())) {
       return JsonResult.error("请正确填写手机号！");
     }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SettleReportServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SettleReportServiceImpl.java
index dc1128f..9c0232b 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SettleReportServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SettleReportServiceImpl.java
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.system.service.impl;
 
+import com.supwisdom.dlpay.api.util.ShopTypes;
 import com.supwisdom.dlpay.framework.dao.*;
 import com.supwisdom.dlpay.framework.domain.TSettlectl;
 import com.supwisdom.dlpay.framework.domain.TShop;
@@ -10,6 +11,7 @@
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.system.bean.*;
 import com.supwisdom.dlpay.system.service.SettleReportService;
+import com.supwisdom.dlpay.util.EnumCheck;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
@@ -32,10 +34,12 @@
   @Autowired
   private ShopDao shopDao;
 
+  private EnumCheck<ShopTypes, String> shoptypeCheck = new EnumCheck<>();
+
   @Override
   public String getSystemSettledate() {
     TSettlectl settlectl = settleCtlDao.getOne(1);
-    if (null != settlectl && null != settlectl.getSettledate()) {
+    if (null != settlectl.getSettledate()) {
       return settlectl.getSettledate().toString();
     }
     return DateUtil.getNow("yyyyMMdd");
@@ -143,7 +147,7 @@
           TreeSelectNode node = new TreeSelectNode();
           node.setId(shop.getShopid().toString());
           node.setName(shop.getShopname());
-          node.setOpen(shop.getShoptype() == 0);
+          node.setOpen(!shoptypeCheck.isInEnums(shop.getShoptype(), ShopTypes.NORMAL));
           node.setChecked(false);
           node.setAccno(shop.getShopaccno() == null ? "" : shop.getShopaccno());
           node.setpId(String.valueOf(fshopid));
@@ -203,11 +207,11 @@
         //商户组,计算该组下所有的交易额
         long transcnt = 0;
         double transamt = 0;
-        List<TShop> childrenShops = getChildrenShopByShopid(shopAllList,shop.getShopid().intValue()); //子商户列表
+        List<TShop> childrenShops = getChildrenShopByShopid(shopAllList, shop.getShopid().intValue()); //子商户列表
         for (TShop child : childrenShops) {
-          if(!StringUtil.isEmpty(child.getShopaccno())){
-            for(ShopBusinessInfo info:businessInfos){
-              if(child.getShopaccno().equals(info.getShopaccno())){
+          if (!StringUtil.isEmpty(child.getShopaccno())) {
+            for (ShopBusinessInfo info : businessInfos) {
+              if (child.getShopaccno().equals(info.getShopaccno())) {
                 transcnt += info.getTranscnt();
                 transamt += (info.getCramt() - info.getDramt());
               }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java
index 24beb2b..51981fd 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java
@@ -8,6 +8,7 @@
 import com.supwisdom.dlpay.api.domain.TSourceTypeConfig;
 import com.supwisdom.dlpay.api.domain.TShopSourceType;
 import com.supwisdom.dlpay.api.domain.TShopSourceTypeConfig;
+import com.supwisdom.dlpay.api.util.ShopTypes;
 import com.supwisdom.dlpay.framework.dao.ShopDao;
 import com.supwisdom.dlpay.framework.dao.ShopaccDao;
 import com.supwisdom.dlpay.framework.data.SystemDateTime;
@@ -15,13 +16,11 @@
 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;
-import com.supwisdom.dlpay.framework.util.TradeDict;
+import com.supwisdom.dlpay.framework.util.*;
 import com.supwisdom.dlpay.system.bean.ShopConfigBean;
 import com.supwisdom.dlpay.system.bean.ZTreeNode;
 import com.supwisdom.dlpay.system.service.ShopDataService;
+import com.supwisdom.dlpay.util.EnumCheck;
 import com.supwisdom.dlpay.util.WebCheckException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -53,6 +52,8 @@
   @Autowired
   private ShopSourceTypeConfigDao shopPaytypeConfigDao;
 
+  private EnumCheck<ShopTypes, String> enumUtil = new EnumCheck<>();
+
   @Override
   public List<ZTreeNode> getAllShopNodes() {
     List<ZTreeNode> result = new ArrayList<>(0);
@@ -68,7 +69,8 @@
         node.setOpen(true);
         node.setShoptype(shop.getShoptype());
         node.setShopaccno(StringUtil.isEmpty(shop.getShopaccno()) ? "" : shop.getShopaccno());
-        node.setIconSkin(shop.getShoptype() == 0 ? "pIcon01" : "pIcon02");
+        node.setIconSkin(enumUtil.isInEnums(shop.getShoptype(),
+            ShopTypes.ROOT, ShopTypes.GROUP) ? "pIcon01" : "pIcon02");
         result.add(node);
       }
     }
@@ -86,6 +88,9 @@
   @Override
   public boolean deleteShop(TShop shop) throws WebCheckException {
     if (null != shop) {
+      if (ShopTypes.ROOT.value().equals(shop.getShoptype())) {
+        throw new WebCheckException("不能删除根商户节点");
+      }
       List<TShop> childShops = shopDao.getChildShopsByShopid(shop.getShopid());
       if (!StringUtil.isEmpty(childShops))
         throw new WebCheckException("请先删除下级商户");
@@ -110,7 +115,8 @@
       TShop fshop = shopDao.getTShopByShopid(shop.getFshopid());
       if (null == fshop) {
         throw new WebCheckException("上级商户不存在！");
-      } else if (fshop.getShoptype() == 1) {
+      } else if (!enumUtil.isInEnums(fshop.getShoptype(),
+          ShopTypes.ROOT, ShopTypes.GROUP)) {
         throw new WebCheckException("上级商户不是商户组！");
       }
     }
@@ -130,7 +136,7 @@
       shop.setOpendate(dt.getHostdate());
       shop.setTenantId(TenantContext.getTenantSchema());
       shopDao.save(shop);
-      if (shop.getShoptype() == 1) {
+      if (enumUtil.isInEnums(shop.getShoptype(), ShopTypes.NORMAL)) {
         TShopacc shopacc = new TShopacc();
         shopacc.setShopaccno(String.format("2%09d", shop.getShopid()));
         shopacc.setShopid(shop.getShopid());
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
index 4bd34fe..ce13e1a 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
@@ -19,9 +19,6 @@
   public static final String IDTYPE_OTHER = "9"; //其他
   public static final String[] IDTYPE_DICTS = {"1", "2", "3", "4", "5", "9"}; //联动
 
-  public static final int SHOPTYPE_GROUP = 0; //商户组
-  public static final int SHOPTYPE_LEAF = 1;  //末级商户，独立核算商户
-
   public static final String FEETYPE_DEFAULT = "none";
   public static final String FEETYPE_MEALER = "mealer";
   public static final String FEETYPE_DISCOUNT = "discount";
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/util/EnumCheck.java b/payapi/src/main/java/com/supwisdom/dlpay/util/EnumCheck.java
new file mode 100644
index 0000000..953aa5f
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/util/EnumCheck.java
@@ -0,0 +1,12 @@
+package com.supwisdom.dlpay.util;
+
+public class EnumCheck<T, U> {
+  public boolean isInEnums(U value, T... expected) {
+    for (T item : expected) {
+      if (item.toString().equals(value)) {
+        return true;
+      }
+    }
+    return false;
+  }
+}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt
index 07c6c40..068cca7 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt
@@ -1,18 +1,19 @@
 package com.supwisdom.dlpay.api.service.impl
 
 import com.supwisdom.dlpay.api.bean.OpenShopParam
+import com.supwisdom.dlpay.api.service.ShopService
+import com.supwisdom.dlpay.api.util.ShopTypes
+import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.dao.ShopDao
 import com.supwisdom.dlpay.framework.dao.ShopaccDao
 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.util.Subject
-import com.supwisdom.dlpay.api.service.ShopService
-import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.util.StringUtil
+import com.supwisdom.dlpay.framework.util.Subject
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
-import com.supwisdom.dlpay.util.ConstantUtil
+import com.supwisdom.dlpay.util.EnumCheck
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
 
@@ -28,8 +29,10 @@
     @Autowired
     private lateinit var systemUtilService: SystemUtilService
 
+    private val shoptypeCheck = EnumCheck<ShopTypes, String>()
+
     override fun findByThirdUniqueId(uniqueId: String): TShop? {
-       return shopDao.getByThirdUniqueIdenty(uniqueId)
+        return shopDao.getByThirdUniqueIdenty(uniqueId)
     }
 
     override fun registerShop(param: OpenShopParam): TShop {
@@ -60,7 +63,7 @@
             opendate = systemdatetime.hostdate
             thirdUniqueIdenty = param.shopUniqueId
         })
-        if (ConstantUtil.SHOPTYPE_GROUP != shop.shoptype) {
+        if (shoptypeCheck.isInEnums(shop.shoptype, ShopTypes.NORMAL)) {
             //非商户组要创建账号
             val shopaccno = String.format("2%09d", shop.shopid)
             shopaccDao.save(TShopacc().apply {
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index 83933b6..fdeebca 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -498,7 +498,7 @@
 VALUES ('DAYENDSETTLETASK', '日终结算', '0', '20190619100600', '{tenantid}');
 
 INSERT INTO "tb_shop" ("shopid", "shopname", "shoptype", "fshopid", "status", "opendate", "tenantid")
-VALUES (1, '支付中心', 0, 0, 'normal', '20190517', '{tenantid}');
+VALUES (1, '支付中心', 'root', 0, 'normal', '20190517', '{tenantid}');
 
 INSERT INTO "tb_transcode" ("transcode", "transname", "tenantid")
 VALUES (3010, '市民卡代扣', '{tenantid}');
diff --git a/payapi/src/main/resources/templates/system/shop/config.html b/payapi/src/main/resources/templates/system/shop/config.html
index b8acc1d..ed1b027 100644
--- a/payapi/src/main/resources/templates/system/shop/config.html
+++ b/payapi/src/main/resources/templates/system/shop/config.html
@@ -14,7 +14,8 @@
                         商户树<span style="font-size: 12px;">（双击结算商户查询）</span>
                     </div>
                     <div class="layui-card-body layui-show">
-                        <ul id="shopacctree" class="ztree" style="background-color: #D7F9F7;max-height: 560px;overflow:auto;"></ul>
+                        <ul id="shopacctree" class="ztree"
+                            style="background-color: #D7F9F7;max-height: 560px;overflow:auto;"></ul>
                     </div>
                 </div>
             </div>
@@ -28,16 +29,20 @@
                                 <option th:each="pt:${paytypelist}" th:value="${pt.sourceType}"
                                         th:text="${pt.paydesc}"></option>
                             </select>&emsp;
-                            <button id="btn-search-shopsourcetype" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+                            <button id="btn-search-shopsourcetype" class="layui-btn icon-btn"
+                                    data-type="search"><i class="layui-icon">&#xe615;</i>搜索
                             </button>
-                            <button id="btn-add-shopsourcetype" class="layui-btn icon-btn" data-type="add"><i class="layui-icon">&#xe654;</i>新
+                            <button id="btn-add-shopsourcetype" class="layui-btn icon-btn" data-type="add"><i
+                                    class="layui-icon">&#xe654;</i>新
                                 增
                             </button>
-                            <button id="btn-reset-shopsourcetype" class="layui-btn layui-btn-primary" data-type="reset"><i
+                            <button id="btn-reset-shopsourcetype" class="layui-btn layui-btn-primary"
+                                    data-type="reset"><i
                                     class="layui-icon"></i>清 空
                             </button>
                         </div>
-                        <table class="layui-table" id="shopPaytypeTable" lay-filter="shopPaytypeTable-filter"></table>
+                        <table class="layui-table" id="shopPaytypeTable"
+                               lay-filter="shopPaytypeTable-filter"></table>
                     </div>
                 </div>
             </div>
@@ -47,22 +52,26 @@
 
 <!-- 表格状态列 -->
 <script type="text/html" id="shop-consumeenable-tpl-state">
-    <input type="checkbox" lay-filter="shop-consumeenable-tpl-state" value="{{d.shopaccno}}" def-sourceType="{{d.sourceType}}" lay-skin="switch" lay-text="启用|关闭"
+    <input type="checkbox" lay-filter="shop-consumeenable-tpl-state" value="{{d.shopaccno}}"
+           def-sourceType="{{d.sourceType}}" lay-skin="switch" lay-text="启用|关闭"
            {{d.consumeEnable==true?'checked':''}}/>
 </script>
 <script type="text/html" id="shop-anonymousenable-tpl-state">
     {{# if(d.consumeEnable == true ){ }}
-    <input type="checkbox" lay-filter="shop-anonymousenable-tpl-state" value="{{d.shopaccno}}" def-sourceType="{{d.sourceType}}" lay-skin="switch"
+    <input type="checkbox" lay-filter="shop-anonymousenable-tpl-state" value="{{d.shopaccno}}"
+           def-sourceType="{{d.sourceType}}" lay-skin="switch"
            lay-text="启用|关闭"
            {{(d.consumeEnable==true && d.anonymousEnable==true)?'checked':''}}/>
     {{# }else{ }}
-    <input type="checkbox" lay-filter="shop-anonymousenable-tpl-state" value="{{d.shopaccno}}" def-sourceType="{{d.sourceType}}" lay-skin="switch"
+    <input type="checkbox" lay-filter="shop-anonymousenable-tpl-state" value="{{d.shopaccno}}"
+           def-sourceType="{{d.sourceType}}" lay-skin="switch"
            lay-text="启用|关闭"
            {{(d.consumeEnable==true && d.anonymousEnable==true)?'checked':''}} disabled/>
     {{# } }}
 </script>
 <script type="text/html" id="shop-reverseenable-tpl-state">
-    <input type="checkbox" lay-filter="shop-reverseenable-tpl-state" value="{{d.shopaccno}}" def-sourceType="{{d.sourceType}}" lay-skin="switch" lay-text="启用|关闭"
+    <input type="checkbox" lay-filter="shop-reverseenable-tpl-state" value="{{d.shopaccno}}"
+           def-sourceType="{{d.sourceType}}" lay-skin="switch" lay-text="启用|关闭"
            {{d.reverseEnable==true?'checked':''}}/>
 </script>
 
@@ -110,18 +119,21 @@
             $("#search-sourceType").val("");
             form.render('select');
         });
-        $('#btn-search-shopsourcetype').click(function(){
+        $('#btn-search-shopsourcetype').click(function () {
             var ptype = $("#search-sourceType").val();
-            table.reload('shopPaytypeTable', {where: {sourceType: ptype, shopaccno:""}, page: {curr: 1}});
+            table.reload('shopPaytypeTable', {where: {sourceType: ptype, shopaccno: ""}, page: {curr: 1}});
         });
 
         function ondblclick(event, treeId, treeNode) {
-            if (treeNode.shoptype !== 1 || ""===treeNode.shopaccno) {
+            if (treeNode.shoptype !== 'normal' || "" === treeNode.shopaccno) {
                 layer.msg("请选择结算商户查询", {icon: 2, time: 1000});
                 return;
             }
             var ptype = $("#search-sourceType").val();
-            table.reload('shopPaytypeTable', {where: {sourceType: ptype, shopaccno: treeNode.shopaccno}, page: {curr: 1}});
+            table.reload('shopPaytypeTable', {
+                where: {sourceType: ptype, shopaccno: treeNode.shopaccno},
+                page: {curr: 1}
+            });
         }
 
         // 渲染表格
@@ -132,8 +144,15 @@
             width: 1010,
             cols: [
                 [
-                    {field: 'shopaccno', title: '商户账号', width: 150, align: 'center', fixed: 'left', sort: true},
-                    {field: 'shopname', title: '商户名称',  align: 'center', fixed: 'left', sort: true},
+                    {
+                        field: 'shopaccno',
+                        title: '商户账号',
+                        width: 150,
+                        align: 'center',
+                        fixed: 'left',
+                        sort: true
+                    },
+                    {field: 'shopname', title: '商户名称', align: 'center', fixed: 'left', sort: true},
                     {field: 'paydesc', title: '支付方式', align: 'center', sort: true},
                     {
                         field: 'consumeEnable',
@@ -159,7 +178,8 @@
                         templet: '#shop-reverseenable-tpl-state',
                         sort: true
                     },
-                    {align: 'center', title: '操作', width: 90, fixed: 'right', templet: function (item) {
+                    {
+                        align: 'center', title: '操作', width: 90, fixed: 'right', templet: function (item) {
                             if (item.sourceType !== 'balance') {
                                 return '<a class="layui-btn layui-btn-xs" lay-event="config">配置</a>';
                             }
@@ -181,7 +201,7 @@
                 _csrf: token
             }, function (data) {
                 if (data.code === 200) {
-                    layer.msg(data.msg, {icon: 1, time:1000});
+                    layer.msg(data.msg, {icon: 1, time: 1000});
                     table.reload('shopPaytypeTable');
                 } else if (data.code === 401) {
                     layer.msg(data.msg, {icon: 2, time: 1500}, function () {
@@ -192,7 +212,7 @@
                     $(obj.elem).prop('checked', !obj.elem.checked);
                     form.render('checkbox');
                 }
-            },function () {
+            }, function () {
                 layer.msg('请求失败了，请稍后再试', {icon: 2});
                 $(obj.elem).prop('checked', !obj.elem.checked);
                 form.render('checkbox');
@@ -243,13 +263,13 @@
                 return;
             }
             var shopNode = shopNodes[0]; //选中商户
-            if(shopNode.shoptype!==1 || ""===shopNode.shopaccno){
+            if (shopNode.shoptype !== 'normal' || "" === shopNode.shopaccno) {
                 layer.msg("请选择结算商户！", {icon: 2, time: 1000});
                 return;
             }
             admin.putTempData('t_addshopsourcetype', {
-                shopaccno:shopNode.shopaccno,
-                shopname: shopNode.name.slice(shopNode.id.length+1)  //23_第一食堂，截取商户名称
+                shopaccno: shopNode.shopaccno,
+                shopname: shopNode.name.slice(shopNode.id.length + 1)  //23_第一食堂，截取商户名称
             });
             admin.popupCenter({
                 title: "新增支付能力",
diff --git a/payapi/src/main/resources/templates/system/shop/index.html b/payapi/src/main/resources/templates/system/shop/index.html
index 0da8653..32ab1dc 100644
--- a/payapi/src/main/resources/templates/system/shop/index.html
+++ b/payapi/src/main/resources/templates/system/shop/index.html
@@ -14,20 +14,24 @@
                         商户树<span style="font-size: 12px;">（双击商户进行修改）</span>
                     </div>
                     <div class="layui-card-body layui-show" style="margin-bottom: 15px;">
-                        <ul id="shoptree" class="ztree" style="background-color: #D7F9F7;max-height: 527px;overflow:auto;"></ul>
+                        <ul id="shoptree" class="ztree"
+                            style="background-color: #D7F9F7;max-height: 527px;overflow:auto;"></ul>
                     </div>
                 </div>
             </div>
             <div class="layui-col-xs7 layui-col-md9">
                 <div class="layui-card" style="min-height: 600px;">
-                    <div id="shop-info" class="layui-form toolbar" lay-filter="shop-info-form" style="display: none;">
+                    <div id="shop-info" class="layui-form toolbar" lay-filter="shop-info-form"
+                         style="display: none;">
                         <div class="layui-card-header">商户基本信息</div>
                         <div class="layui-form-item" style="margin-left: 15px;">
-                            <label class="layui-form-label" style="color: red;"><span style="color: red;">*</span>商户类型</label>
+                            <label class="layui-form-label" style="color: red;"><span
+                                    style="color: red;">*</span>商户类型</label>
                             <div class="layui-input-inline">
-                                <select name="shoptype" id="shoptype" lay-filter="shoptype-filter" lay-verify="required">
-                                    <option value="0">商户组</option>
-                                    <option value="1">结算商户</option>
+                                <select name="shoptype" id="shoptype" lay-filter="shoptype-filter"
+                                        lay-verify="required">
+                                    <option value="group">商户组</option>
+                                    <option value="normal">结算商户</option>
                                 </select>
                             </div>
                             <div class="layui-form-mid layui-word-aux">
@@ -39,28 +43,33 @@
                                 <div class="layui-inline">
                                     <label class="layui-form-label">商户号</label>
                                     <div class="layui-input-inline">
-                                        <input type="text" name="shopid" class="layui-input" style="background-color: #f1f1f1;"
+                                        <input type="text" name="shopid" class="layui-input"
+                                               style="background-color: #f1f1f1;"
                                                readonly="readonly"/>
                                     </div>
                                 </div>
                                 <div class="layui-inline">
                                     <label class="layui-form-label">商户账号</label>
                                     <div class="layui-input-inline">
-                                        <input type="text" name="shopaccno" autocomplete="off" style="background-color: #f1f1f1;"
+                                        <input type="text" name="shopaccno" autocomplete="off"
+                                               style="background-color: #f1f1f1;"
                                                class="layui-input" readonly="readonly"/>
                                     </div>
                                 </div>
                             </div>
                             <div class="layui-form-item">
                                 <div class="layui-inline">
-                                    <label class="layui-form-label"><span style="color: red;">*</span>上级商户号</label>
+                                    <label class="layui-form-label"><span
+                                            style="color: red;">*</span>上级商户号</label>
                                     <div class="layui-input-inline">
-                                        <input type="text" name="fshopid" id="fshopid" class="layui-input" autocomplete="off"
+                                        <input type="text" name="fshopid" id="fshopid" class="layui-input"
+                                               autocomplete="off"
                                                lay-verify="required|number"/>
                                     </div>
                                 </div>
                                 <div class="layui-inline">
-                                    <label class="layui-form-label"><span style="color: red;">*</span>商户名</label>
+                                    <label class="layui-form-label"><span
+                                            style="color: red;">*</span>商户名</label>
                                     <div class="layui-input-inline">
                                         <input type="text" name="shopname" autocomplete="off"
                                                class="layui-input" maxlength="30" lay-verify="required"/>
@@ -72,13 +81,15 @@
                                 <div class="layui-inline">
                                     <label class="layui-form-label">邮编</label>
                                     <div class="layui-input-inline">
-                                        <input type="text" name="zipcode" class="layui-input" autocomplete="off" />
+                                        <input type="text" name="zipcode" class="layui-input"
+                                               autocomplete="off"/>
                                     </div>
                                 </div>
                                 <div class="layui-inline">
                                     <label class="layui-form-label">地址</label>
                                     <div class="layui-input-inline">
-                                        <input type="text" name="addr" class="layui-input" maxlength="40" autocomplete="off" />
+                                        <input type="text" name="addr" class="layui-input" maxlength="40"
+                                               autocomplete="off"/>
                                     </div>
                                 </div>
                             </div>
@@ -89,19 +100,21 @@
                                 <div class="layui-inline">
                                     <label class="layui-form-label">姓名</label>
                                     <div class="layui-input-inline">
-                                        <input type="text" name="contactman" class="layui-input" autocomplete="off"/>
+                                        <input type="text" name="contactman" class="layui-input"
+                                               autocomplete="off"/>
                                     </div>
                                 </div>
                                 <div class="layui-inline">
                                     <label class="layui-form-label">手机号</label>
                                     <div class="layui-input-inline">
-                                        <input type="text" name="mobile" class="layui-input" maxlength="20" autocomplete="off"
-                                               lay-verify="mobile" />
+                                        <input type="text" name="mobile" class="layui-input" maxlength="20"
+                                               autocomplete="off"
+                                               lay-verify="mobile"/>
                                     </div>
                                 </div>
                             </div>
                             <div class="layui-form-item">
-                                <div class="layui-inline" >
+                                <div class="layui-inline">
                                     <label class="layui-form-label">证件类型</label>
                                     <div class="layui-input-inline">
                                         <select name="idtype" lay-filter="idtype-filter">
@@ -117,7 +130,8 @@
                                 <div class="layui-inline">
                                     <label class="layui-form-label">证件号</label>
                                     <div class="layui-input-inline">
-                                        <input type="text" name="idno" class="layui-input" maxlength="20" autocomplete="off"/>
+                                        <input type="text" name="idno" class="layui-input" maxlength="20"
+                                               autocomplete="off"/>
                                     </div>
                                 </div>
                             </div>
@@ -125,23 +139,29 @@
                                 <div class="layui-inline">
                                     <label class="layui-form-label">邮箱</label>
                                     <div class="layui-input-inline">
-                                        <input type="text" name="email" class="layui-input" autocomplete="off" lay-verify="swEmail"/>
+                                        <input type="text" name="email" class="layui-input" autocomplete="off"
+                                               lay-verify="swEmail"/>
                                     </div>
                                 </div>
                                 <div class="layui-inline">
                                     <label class="layui-form-label">电话</label>
                                     <div class="layui-input-inline">
-                                        <input type="text" name="tel" class="layui-input" maxlength="20" autocomplete="off" />
+                                        <input type="text" name="tel" class="layui-input" maxlength="20"
+                                               autocomplete="off"/>
                                     </div>
                                 </div>
                             </div>
                         </div>
 
                         <div class="layui-form-item" style="padding-bottom: 20px;text-align: center;">
-                            <button class="layui-btn" lay-filter="form-submit-shop-btn" lay-submit id="submitbtn-shop-btn">保存</button>
-                            <button class="layui-btn layui-btn-primary" type="button" id="cancelbtn">取消</button>
+                            <button class="layui-btn" lay-filter="form-submit-shop-btn" lay-submit
+                                    id="submitbtn-shop-btn">保存
+                            </button>
+                            <button class="layui-btn layui-btn-primary" type="button" id="cancelbtn">取消
+                            </button>
                             <div class="layui-inline" style="margin-left: 10px;" id="shop-add-hid-div">
-                                <input type="checkbox" id="shop-add-continue-flag" lay-skin="primary" title="继续新增" />
+                                <input type="checkbox" id="shop-add-continue-flag" lay-skin="primary"
+                                       title="继续新增"/>
                             </div>
                         </div>
                     </div>
@@ -209,7 +229,7 @@
             var zTree = $.fn.zTree.getZTreeObj("shoptree");
             if (treeNode.isParent) {
                 var childrenNodes = treeNode.children;
-                if (childrenNodes && childrenNodes.length != 0) {
+                if (childrenNodes && childrenNodes.length !== 0) {
                     layer.msg("请先删除下级商户", {icon: 2, time: 2000});
                     return false;
                 }
@@ -230,10 +250,10 @@
                     success: function (result) {
                         console.log(result);
                         layer.closeAll('loading');
-                        if (result.code == 200) {
+                        if (result.code === 200) {
                             layer.msg(result.msg, {icon: 1});
                             flag = true;
-                        } else if (result.code == 401) {
+                        } else if (result.code === 401) {
                             layer.msg(result.msg, {icon: 2, time: 1500}, function () {
                                 location.replace('[[@{/login}]]');
                             }, 1000);
@@ -272,11 +292,11 @@
                 success: function (result) {
                     layer.closeAll('loading');
                     debugger
-                    if (result.code == 200) {
+                    if (result.code === 200) {
                         var zTree = $.fn.zTree.getZTreeObj("shoptree");
                         var treeNode = zTree.getNodeByParam("id", '' + result.shop.shopid, null);
-                        if (undefined != treeNode && null != treeNode) {
-                            treeNode.id = ''+result.shop.shopid;
+                        if (undefined !== treeNode && treeNode != null) {
+                            treeNode.id = '' + result.shop.shopid;
                             treeNode.pId = '' + result.shop.fshopid;
                             treeNode.name = '' + result.shop.shopid + '_' + result.shop.shopname;
                             zTree.updateNode(treeNode); //修改节点
@@ -288,7 +308,7 @@
                                 name: '' + result.shop.shopid + '_' + result.shop.shopname,
                                 shoptype: result.shop.shoptype
                             }
-                            if (result.shop.shoptype == 1) {
+                            if (result.shop.shoptype === 'normal') {
                                 newNode["iconSkin"] = "pIcon02";
                             } else {
                                 newNode["iconSkin"] = "pIcon01";
@@ -299,11 +319,10 @@
                         if (!$("#shop-add-continue-flag").is(":checked")) {
                             $("#shop-info").hide();
                         }
-                    } else if (result.code == 401) {
+                    } 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});
@@ -317,7 +336,7 @@
         });
 
         function addHoverDom(treeId, treeNode) {
-            if (treeNode.shoptype == 0) {
+            if (treeNode.shoptype !== 'normal') {
                 var sObj = $("#" + treeNode.tId + "_span");
                 if (treeNode.editNameFlag || $("#addBtn_" + treeNode.tId).length > 0) return;
                 var addStr = "<span class='button add' id='addBtn_" + treeNode.tId
@@ -325,20 +344,20 @@
                 sObj.after(addStr);
                 var btn = $("#addBtn_" + treeNode.tId);
                 if (btn) btn.bind("click", function () {
-                    form.val("shop-info-form",{
-                        "shopid":"0",
+                    form.val("shop-info-form", {
+                        "shopid": "0",
                         "shopname": "",
-                        "shopaccno":"",
-                        "fshopid":treeNode.id,
-                        "shoptype":"1",
-                        "zipcode":"",
-                        "addr":"",
-                        "contactman":"",
-                        "idtype":"1",
-                        "idno":"",
-                        "mobile":"",
-                        "email":"",
-                        "tel":""
+                        "shopaccno": "",
+                        "fshopid": treeNode.id,
+                        "shoptype": "normal",
+                        "zipcode": "",
+                        "addr": "",
+                        "contactman": "",
+                        "idtype": "1",
+                        "idno": "",
+                        "mobile": "",
+                        "email": "",
+                        "tel": ""
                     });
                     $("#fshopid").attr("readonly", "readonly");
                     $("#shoptype").removeAttr("disabled");
@@ -356,9 +375,9 @@
             admin.dgo('[[@{/shop/getshopinfo}]]', {
                 "shopid": treeNode.id
             }, function (data) {
-                console.log("getshopinfo返回",data);
-                if (data.code == 200) {
-                    form.val("shop-info-form",data.shop);
+                console.log("getshopinfo返回", data);
+                if (data.code === 200) {
+                    form.val("shop-info-form", data.shop);
                     $("#fshopid").removeAttr("readonly");
                     $("#shoptype").attr('disabled', 'disabled');
                     form.render('select');
@@ -366,11 +385,10 @@
                     $("#shop-add-continue-flag").prop("checked", false);
                     $("#shop-add-hid-div").hide();
                     $("#shop-info").show();
-                } else if (data.code == 401) {
+                } 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, time: 2000});
                 }
@@ -381,13 +399,12 @@
         }
 
         admin.dgo('[[@{/shop/shoptree}]]', {}, function (data) {
-            if (data.code == 200) {
+            if (data.code === 200) {
                 initTree(data.data);
-            } else if (data.code == 401) {
+            } 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, time: 2000});
             }
