diff --git a/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java b/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java
index fa05ec4..19af93c 100644
--- a/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java
@@ -478,7 +478,6 @@
                         }else if(RestaurantConstant.ROUNDTYPE_FLOOR.equals(cntflag.getParaval())){
                             cntamount=Math.floor(cntamount);
                         }
-
                     }
                     tTransdtl.setRuleid(bean.getRuleid());
                     tTransdtl.setManagefee(amount - cntamount);
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustReportServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustReportServiceImpl.java
index d21a439..7659754 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustReportServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustReportServiceImpl.java
@@ -134,8 +134,8 @@
                     tot.setTotcnt(tot.getTotcnt()+b.getTotcnt());
                     tot.setTotamt(tot.getTotamt()+b.getTotamt());
 
-                    b.setCustname(DataUtil.dataDesensitization(b.getCustname(), 1));
-                    b.setCardno(DataUtil.dataDesensitization(b.getCardno(), 0,4));
+                    b.setCustname(DataUtil.dataDesensitizationRevert(b.getCustname(), 1));
+                 //   b.setCardno(DataUtil.dataDesensitization(b.getCardno(), 0,4));
                 }
                 list.add(tot);
                 return list;
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustomerServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustomerServiceImpl.java
index 2fdc766..a65d019 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustomerServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustomerServiceImpl.java
@@ -140,8 +140,8 @@
         if("page".equals(type)){
             if(null!=list){
                 for(CustomerShowBean bean:list){
-                    bean.setCustname(DataUtil.dataDesensitization(bean.getCustname(),1));
-                    bean.setCardno(DataUtil.dataDesensitization(bean.getCardno(),0,4));
+                    bean.setCustname(DataUtil.dataDesensitizationRevert(bean.getCustname(),1));
+            //        bean.setCardno(DataUtil.dataDesensitization(bean.getCardno(),0,4));
                     bean.setBankcardno(DataUtil.dataDesensitization(bean.getBankcardno(),6,4));
                 }
             }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/StatementReportServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/StatementReportServiceImpl.java
index ecc9d4b..c2ea5f9 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/StatementReportServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/StatementReportServiceImpl.java
@@ -93,7 +93,7 @@
       if (null!=searchBean.getGroupid()) {
         sb.append( " and a1.devgroupid=:groupid ");
       }
-      sb.append("group by t.devgroupid,a1.devgroupid,a2.devgroupid order by t.devgroupid ");
+      sb.append("group by t.devgroupid,a1.devgroupid,a2.devgroupid order by a1.groupname ");
       Query query = entityManager.createNativeQuery(sb.toString());
       query.setParameter("startdate", startdate);
       query.setParameter("enddate", enddate);
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java
index 54f012a..ccf4bc5 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java
@@ -65,8 +65,8 @@
         Specification<TTransDtl> spec = gettTransDtlSpecification(param);
         Page<TTransDtl> dtls = transDtlDao.findAll(spec, pageable);
         dtls.forEach((dtl) -> {
-            dtl.setCustname(DataUtil.dataDesensitization(dtl.getCustname(), 1));
-            dtl.setCardno(DataUtil.dataDesensitization(dtl.getCardno(), 0,4));
+            dtl.setCustname(DataUtil.dataDesensitizationRevert(dtl.getCustname(), 1));
+         //   dtl.setCardno(DataUtil.dataDesensitization(dtl.getCardno(), 0,4));
         });
 
         return new PageResult<>(dtls);
@@ -149,7 +149,7 @@
         List<VTransDtl> list = query.getResultList();
         if (null != list) {
             for (VTransDtl bean : list) {
-                bean.setCustname(DataUtil.dataDesensitization(bean.getCustname(), 1));
+                bean.setCustname(DataUtil.dataDesensitizationRevert(bean.getCustname(), 1));
             }
         }
 
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/util/DataUtil.java b/src/main/java/com/supwisdom/dlpay/restaurant/util/DataUtil.java
index 9046057..ede7d6c 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/util/DataUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/util/DataUtil.java
@@ -16,6 +16,20 @@
         return result.toString();
     }
 
+    public static String dataDesensitizationRevert(String data,int length) {
+        if (StringUtil.isEmpty(data)) {
+            return "";
+        }
+        int originLength = data.length();
+        String endStr = data.substring(length,originLength );
+        StringBuilder result = new StringBuilder();
+        for (int i = 0; i < 1; i++) {
+            result.append("*");
+        }
+        result.append(endStr);
+        return result.toString();
+    }
+
     public static String dataDesensitization(String data,int startlength,int endlength) {
         if (StringUtil.isEmpty(data)) {
             return "";
@@ -31,8 +45,8 @@
     }
 
     public static void main(String[] args) {
-        String i="25008888";
-        System.out.println(dataDesensitization(i,0,4));
+        String i="QB";
+        System.out.println(dataDesensitizationRevert(i,1));
 
     }
 }
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
index 3177b7f..ee72ecd 100755
--- a/src/main/resources/templates/index.html
+++ b/src/main/resources/templates/index.html
@@ -79,6 +79,8 @@
                             </dl>
                         </dd>
                     </dl>
+                    <dl class="layui-nav-child" style="height: 40px">
+                    </dl>
                 </li>
 
                 <!--<li class="layui-nav-item">-->
diff --git a/src/main/resources/templates/restaurant/customer/form.html b/src/main/resources/templates/restaurant/customer/form.html
index 41c75a0..d390ae9 100644
--- a/src/main/resources/templates/restaurant/customer/form.html
+++ b/src/main/resources/templates/restaurant/customer/form.html
@@ -25,7 +25,7 @@
     </div>-->
 
     <div class="layui-form-item">
-        <label class="layui-form-label">人员类别</label>
+        <label class="layui-form-label"><span style="color: red">* </span>人员类别</label>
         <div class="layui-input-block">
             <select name="custtype" id="customer-custtype" lay-verify="required">
                 <option value="">无</option>
@@ -34,7 +34,7 @@
         </div>
     </div>
     <div class="layui-form-item">
-        <label class="layui-form-label">部门</label>
+        <label class="layui-form-label"><span style="color: red">* </span>部门</label>
         <div class="layui-input-block">
             <select name="deptcode" id="customer-deptment" lay-verify="required">
                 <option value="">无</option>
