diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TPaytypeConfig.java b/src/main/java/com/supwisdom/dlpay/api/domain/TPaytypeConfig.java
index 048cbb1..b310480 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TPaytypeConfig.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TPaytypeConfig.java
@@ -2,6 +2,7 @@
 
 import javax.persistence.*;
 import javax.validation.constraints.NotNull;
+import java.io.Serializable;
 
 /**
  * Created by shuwei on 2019/4/9.
@@ -9,7 +10,7 @@
 @Entity
 @Table(name = "TB_PAYTYPE_CONFIG")
 @IdClass(TPaytypeConfigPK.class)
-public class TPaytypeConfig {
+public class TPaytypeConfig implements Serializable {
   @Id
   @Column(name = "PAYTYPE", nullable = false, length = 20)
   private String paytype;
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TBusinesspara.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TBusinesspara.java
index 9b38245..a1e1209 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TBusinesspara.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TBusinesspara.java
@@ -43,4 +43,12 @@
   public void setParaval(String paraval) {
     this.paraval = paraval;
   }
+
+  public String getTenantId() {
+    return tenantId;
+  }
+
+  public void setTenantId(String tenantId) {
+    this.tenantId = tenantId;
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/ShopController.java b/src/main/java/com/supwisdom/dlpay/system/controller/ShopController.java
index f7f69bb..b85095a 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/ShopController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/ShopController.java
@@ -160,7 +160,7 @@
   public String shopConfigView(Model model) {
 //    model.addAttribute("paytypelist", shopDataService.getConsumePaytypes());
     model.addAttribute(Dictionary.PAY_TYPE,
-        dictionaryProxy.<TSourceType>getDictionaryObject(Dictionary.SOURCE_TYPE));
+        dictionaryProxy.<TSourceType>getDictionaryAsList(Dictionary.SOURCE_TYPE));
     return "system/shop/config";
   }
 
@@ -195,7 +195,7 @@
                                           @RequestParam("state") String state, @RequestParam("optype") String optype) {
     if (StringUtil.isEmpty(shopaccno) || StringUtil.isEmpty(paytype)
         || (!ConstantUtil.ENABLE_NO.equals(state) && !ConstantUtil.ENABLE_YES.equals(state))
-        || (!"consume".equals(optype) && !"anonymous".equals(optype) && !"refund".equals(optype))) {
+        || (!"consume".equals(optype) && !"anonymous".equals(optype) && !"reverse".equals(optype))) {
       return JsonResult.error("参数传递错误");
     }
 
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java
index 73ce52b..0842e66 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java
@@ -81,11 +81,13 @@
       operator.setTenantId(TenantContext.getTenantSchema());
       BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
       operator.setOperpwd(encoder.encode(WebConstant.OPERPWD_DEFAULT));
+      operator.setTenantId(TenantContext.getTenantSchema());
       operator = operatorDao.save(operator);
       for (String role : roleids) {
         TOperRole operRole = new TOperRole();
         operRole.setOperid(operator.getOperid());
         operRole.setRoleId(role);
+        operRole.setTenantId(operator.getTenantId());
         operRoleDao.save(operRole);
       }
     } else {
@@ -107,6 +109,7 @@
         TOperRole operRole = new TOperRole();
         operRole.setOperid(op.getOperid());
         operRole.setRoleId(role);
+        operRole.setTenantId(op.getTenantId());
         operRoleDao.save(operRole);
       }
     }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java
index 4fe84f7..a40d97d 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java
@@ -10,6 +10,7 @@
 import com.supwisdom.dlpay.framework.domain.TApiClient;
 import com.supwisdom.dlpay.framework.domain.TBusinesspara;
 import com.supwisdom.dlpay.framework.domain.TSyspara;
+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.system.service.ParamService;
@@ -24,6 +25,7 @@
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
+import sun.net.TelnetInputStream;
 
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
@@ -110,6 +112,7 @@
   @Override
   public boolean saveOrUpdateBusinesspara(TBusinesspara businesspara) {
     if (null != businesspara) {
+      businesspara.setTenantId(TenantContext.getTenantSchema());
       businessparaDao.save(businesspara);
       return true;
     }
@@ -207,7 +210,7 @@
   }
 
   @Override
-  @Cacheable(cacheNames = "source_type_config_cache", key = "#p0")
+  @CacheEvict(cacheNames = "source_type_config_cache", key = "#p0")
   public boolean saveSourceTypeConfig(String paytype, Map<String, String> param) throws WebCheckException {
     TSourceType tPaytype = getSourceType(paytype);
     if (null == tPaytype) throw new WebCheckException("支付能力[" + paytype + "]不存在");
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java
index 66acac4..88178c8 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java
@@ -136,11 +136,13 @@
         TPermission permission = new TPermission();
         permission.setResid(Integer.valueOf(id));
         permission.setRoleId(roleId);
+        permission.setTenantId(TenantContext.getTenantSchema());
         permissionDao.save(permission);
       } else {
         TRoleFunction roleFunction = new TRoleFunction();
         roleFunction.setFunctionId(Integer.valueOf(func));
         roleFunction.setRoleId(roleId);
+        roleFunction.setTenantId(TenantContext.getTenantSchema());
         roleFunctionDao.save(roleFunction);
       }
     }
diff --git a/src/main/resources/templates/system/dtl/shopdtl.html b/src/main/resources/templates/system/dtl/shopdtl.html
index 536b7d9..92e7f60 100644
--- a/src/main/resources/templates/system/dtl/shopdtl.html
+++ b/src/main/resources/templates/system/dtl/shopdtl.html
@@ -12,7 +12,8 @@
                 <div class="layui-inline">
                     <label class="layui-form-label">记账日期</label>
                     <div class="layui-input-inline" style="width: 120px;">
-                        <input type="text" name="startAccdate" id="shopdtl-search-startAccdate" placeholder="开始日期"
+                        <input type="text" name="startAccdate" id="shopdtl-search-startAccdate"
+                               placeholder="开始日期"
                                autocomplete="off" class="layui-input"/>
                     </div>
                     <div class="layui-form-mid">-</div>
@@ -36,7 +37,7 @@
                     <div class="layui-input-block">
                         <select name="sourcetype" id="shopdtl-search-sourcetype" class="layui-select">
                             <option value=""> 全部</option>
-                            <option th:each="pt:${paytypelist}" th:value="${pt.sourceType}"
+                            <option th:each="pt:${paytypeList}" th:value="${pt.sourceType}"
                                     th:text="${pt.paydesc}"></option>
                         </select>&emsp;
                     </div>
@@ -47,7 +48,7 @@
                     <div class="layui-input-block">
                         <select name="transStatus" id="shopdtl-search-transStatus" class="layui-select">
                             <option value=""> 全部</option>
-                            <option th:each="st:${dtlstatuslist}" th:value="${st.dictval}"
+                            <option th:each="st:${dtlStatusList}" th:value="${st.dictval}"
                                     th:text="${st.dictcaption}"></option>
                         </select>&emsp;
                     </div>
@@ -58,12 +59,14 @@
                 <div class="layui-inline">
                     <label class="layui-form-label">交易日期</label>
                     <div class="layui-input-inline" style="width: 120px;">
-                        <input type="text" name="startTransdate" id="shopdtl-search-startTransdate" placeholder="开始日期"
+                        <input type="text" name="startTransdate" id="shopdtl-search-startTransdate"
+                               placeholder="开始日期"
                                autocomplete="off" class="layui-input"/>
                     </div>
                     <div class="layui-form-mid">-</div>
                     <div class="layui-input-inline" style="width: 120px;">
-                        <input type="text" name="endTransdate" id="shopdtl-search-endTransdate" placeholder="结束日期"
+                        <input type="text" name="endTransdate" id="shopdtl-search-endTransdate"
+                               placeholder="结束日期"
                                autocomplete="off" class="layui-input"/>
                     </div>
                 </div>
@@ -71,7 +74,8 @@
                 <div class="layui-inline">
                     <label class="layui-form-label">选择商户</label>
                     <div class="layui-input-block">
-                        <input type="text" name="shopaccno" id="shopdtl-search-shopaccno" placeholder="选择商户" lay-filter="shopdtl-search-shopaccno-filter"
+                        <input type="text" name="shopaccno" id="shopdtl-search-shopaccno" placeholder="选择商户"
+                               lay-filter="shopdtl-search-shopaccno-filter"
                                autocomplete="off" class="layui-input"/>
                     </div>
                 </div>
@@ -92,7 +96,7 @@
                     <div class="layui-input-block">
                         <select name="transcode" id="shopdtl-search-transcode" class="layui-select">
                             <option value=""> 全部</option>
-                            <option th:each="tc:${transcodelist}" th:value="${tc.transcode}"
+                            <option th:each="tc:${transcodeList}" th:value="${tc.transcode}"
                                     th:text="${tc.transname}"></option>
                         </select>
                     </div>
@@ -155,8 +159,8 @@
             click: function (d) {
                 var treeNode = d.current;
                 console.log(treeNode);
-                if(undefined == treeNode.accno || null == treeNode.accno){
-                    layer.msg("请选择结算商户", {icon: 2, time:1500});
+                if (undefined == treeNode.accno || null == treeNode.accno) {
+                    layer.msg("请选择结算商户", {icon: 2, time: 1500});
                     $("#shopdtl-search-shopaccno").val("");
                     treeSelect.revokeNode('shopdtl-search-shopaccno-filter');
                     return false;
@@ -216,25 +220,33 @@
                     {field: 'shopname', title: '商户名称', align: 'center', width: 250},
                     {field: 'amount', title: '交易金额', align: 'center', width: 120, sort: true},
                     {
-                        field: 'transStatus', title: '状态', align: 'center', width: 90, templet: function (item) {
-                            if (item.transStatus == 'init') {
+                        field: 'transStatus',
+                        title: '状态',
+                        align: 'center',
+                        width: 90,
+                        templet: function (item) {
+                            if (item.status === 'init') {
                                 return '<span class="layui-badge layui-bg-gray">初始化</span>';
-                            } else if (item.transStatus == 'success') {
+                            } else if (item.status === 'success') {
                                 return '<span class="layui-badge layui-bg-green">成功</span>';
-                            } else if (item.transStatus == 'fail') {
+                            } else if (item.status === 'fail') {
                                 return '<span class="layui-badge">失败</span>';
-                            } else if (item.transStatus == 'wip') {
+                            } else if (item.status === 'wip') {
                                 return '<span class="layui-badge layui-bg-orange">待支付</span>';
                             } else {
-                                return item.transStatus;
+                                return item.status;
                             }
                         }
                     },
                     {
-                        field: 'tradeflag', title: '类型', align: 'center', width: 60, templet: function (item) {
-                            if (item.tradeflag == 'in') {
+                        field: 'tradeflag',
+                        title: '类型',
+                        align: 'center',
+                        width: 60,
+                        templet: function (item) {
+                            if (item.tradeflag === 'in') {
                                 return '<span style="color: green;">收入</span>';
-                            } else if (item.tradeflag == 'out') {
+                            } else if (item.tradeflag === 'out') {
                                 return '<span style="color: red;">支出</span>';
                             } else {
                                 return item.tradeflag;
@@ -250,12 +262,16 @@
                         width: 130,
                         sort: true,
                         templet: function (item) {
-                            return getTempDictValue('allSourcetypeList', item.sourceType);
+                            return getTempDictValue('sourcetypeList', item.sourceType);
                         }
                     },
                     {
-                        field: 'reverseFlag', title: '冲正状态', align: 'center', width: 100, templet: function (item) {
-                            return getTempDictValue('allReverseflagList', item.reverseFlag);
+                        field: 'reverseFlag',
+                        title: '冲正状态',
+                        align: 'center',
+                        width: 100,
+                        templet: function (item) {
+                            return getTempDictValue('reverseFlagList', item.reverseFlag);
                         }
                     },
                     {field: 'oppositeAccName', title: '交易对象', align: 'center', width: 150},
diff --git a/src/main/resources/templates/system/shop/config.html b/src/main/resources/templates/system/shop/config.html
index 38f6b8a..b80ec4f 100644
--- a/src/main/resources/templates/system/shop/config.html
+++ b/src/main/resources/templates/system/shop/config.html
@@ -93,13 +93,12 @@
             $.fn.zTree.init($("#shopacctree"), menuSetting, nodes);
         }
         admin.dgo('[[@{/shop/shopacctree}]]', {}, 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});
             }
@@ -118,7 +117,7 @@
         });
 
         function ondblclick(event, treeId, treeNode) {
-            if (treeNode.shoptype != 1 || ""==treeNode.shopaccno) {
+            if (treeNode.shoptype !== 1 || ""===treeNode.shopaccno) {
                 layer.msg("请选择结算商户查询", {icon: 2, time: 1000});
                 return;
             }
@@ -162,7 +161,7 @@
                         sort: true
                     },
                     {align: 'center', title: '操作', width: 90, fixed: 'right', templet: function (item) {
-                            if (item.paytype != 'balance') {
+                            if (item.paytype !== 'balance') {
                                 return '<a class="layui-btn layui-btn-xs" lay-event="config">配置</a>';
                             }
                             return '<span style="font-size: 12px;color: #D3D4D3;">无配置</span>';
@@ -182,14 +181,13 @@
                 state: obj.elem.checked ? 'yes' : 'no',
                 _csrf: token
             }, function (data) {
-                if (data.code == 200) {
+                if (data.code === 200) {
                     layer.msg(data.msg, {icon: 1, time:1000});
                     table.reload('shopPaytypeTable');
-                } 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});
                     $(obj.elem).prop('checked', !obj.elem.checked);
@@ -220,13 +218,12 @@
                 optype: optype,
                 _csrf: token
             }, function (data) {
-                if (data.code == 200) {
+                if (data.code === 200) {
                     layer.msg(data.msg, {icon: 1, time: 1000});
-                } 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});
                     $(obj.elem).prop('checked', !obj.elem.checked);
@@ -242,12 +239,12 @@
         $('#btn-add-shoppaytype').click(function () {
             var ztree = $.fn.zTree.getZTreeObj("shopacctree");
             var shopNodes = ztree.getSelectedNodes();
-            if (undefined == shopNodes || null == shopNodes || shopNodes.length < 1) {
+            if (undefined === shopNodes || null == shopNodes || shopNodes.length < 1) {
                 layer.msg("请先选中左侧的一个结算商户", {icon: 2, time: 1000});
                 return;
             }
             var shopNode = shopNodes[0]; //选中商户
-            if(shopNode.shoptype!=1 || ""==shopNode.shopaccno){
+            if(shopNode.shoptype!==1 || ""===shopNode.shopaccno){
                 layer.msg("请选择结算商户！", {icon: 2, time: 1000});
                 return;
             }
@@ -270,7 +267,7 @@
         //监听单元格
         table.on('tool(shopPaytypeTable-filter)', function (obj) {
             var data = obj.data;
-            if ('config' == obj.event) {
+            if ('config' === obj.event) {
                 admin.popupCenter({
                     title: "配置参数【" + data.shopname + "_" + data.paydesc + "】",
                     path: '[[@{/shop/load4paytypepara}]]?shopaccno=' + data.shopaccno + '&paytype=' + data.paytype,
diff --git a/src/main/resources/templates/system/user/index.html b/src/main/resources/templates/system/user/index.html
index c035a36..dc009c7 100644
--- a/src/main/resources/templates/system/user/index.html
+++ b/src/main/resources/templates/system/user/index.html
@@ -32,21 +32,21 @@
                 [
                     {field: 'name', title: '名称', width: 80,fixed: 'left', sort: true},
                     {field: 'sex', title: '性别',fixed: 'left', width: 80, templet: function (item) {
-                            if (item.sex == 'male') {
+                            if (item.sex === 'male') {
                                 return '男'
-                            } else if (item.sex == 'female') {
+                            } else if (item.sex === 'female') {
                                 return '女'
                             } else {
                                 return '男'
                             }
                         }
                     },
-                    {field: 'transStatus', title: '状态',fixed: 'left',width: 80 , templet: function (item) {
-                            if (item.transStatus == 'normal') {
+                    {field: 'status', title: '状态',fixed: 'left',width: 80 , templet: function (item) {
+                            if (item.status === 'normal') {
                                 return '<span class="layui-badge layui-bg-green">正常</span>'
-                            } else if (item.transStatus == 'closed') {
+                            } else if (item.status === 'closed') {
                                 return '<span class="layui-badge">注销</span>'
-                            } else if (item.transStatus == 'locked') {
+                            } else if (item.status === 'locked') {
                                 return '<span class="layui-badge layui-bg-orange">锁定</span>'
                             }  else {
                                 return '异常'
@@ -54,15 +54,15 @@
                         }
                     },
                     {field: 'idtype', align: 'center',width: 100,  title: '证件类型', fixed: 'left', templet: function (item) {
-                            if (item.idtype == '1') {
+                            if (item.idtype === '1') {
                                 return '身份证'
-                            } else if (item.idtype == '2') {
+                            } else if (item.idtype === '2') {
                                 return '护照'
-                            } else if (item.idtype == '3') {
+                            } else if (item.idtype === '3') {
                                 return '驾照'
-                            } else if (item.idtype == '4') {
+                            } else if (item.idtype === '4') {
                                 return '港澳通行证'
-                            } else if (item.idtype == '5') {
+                            } else if (item.idtype === '5') {
                                 return '学工号'
                             } else {
                                 return '其他'
@@ -128,9 +128,9 @@
                 }, function (data) {
                     console.log(data.code);
                     layer.closeAll('loading');
-                    if (data.code == 200) {
+                    if (data.code === 200) {
                         layer.msg(data.msg, {icon: 1});
-                    } else if (data.code == 401) {
+                    } else if (data.code === 401) {
                         layer.msg(data.msg, {icon: 2, time: 1500}, function () {
                             location.replace('[[@{/login}]]');
                         }, 1000);
@@ -142,7 +142,7 @@
                 }, function (ret) {
                     console.log(ret);
                     layer.closeAll('loading');
-                    if(ret.transStatus==403){
+                    if(ret.transStatus===403){
                         layer.msg('没有权限', {icon: 2});
                     }else{
                         layer.msg('请求失败了，请稍后再试', {icon: 2});
