diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/WaterBudinessConstants.java b/src/main/java/com/supwisdom/dlpay/framework/util/WaterBudinessConstants.java
index c7aa81c..ea2a198 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/WaterBudinessConstants.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/WaterBudinessConstants.java
@@ -4,4 +4,6 @@
     public final static String waterAuthUrl = "water_auth_url";
     public final static String waterSinaShortUrl = "water_sina_shorturl";
     public final static String WATER_SHOP_ACCNO = "water_shopaccno";
+    public final static String WATER_APPID = "water_appid";
+    public final static String WATER_SECRET = "water_secret";
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java b/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
index b146230..0a8bad2 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
@@ -7,6 +7,8 @@
 import com.supwisdom.dlpay.framework.domain.TPerson;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.system.bean.PersonParamBean;
+import com.supwisdom.dlpay.water.bean.UserAccountSearchBean;
+import com.supwisdom.dlpay.water.pojo.UserAccountDTO;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -48,4 +50,7 @@
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     TPersonIdentity updateAccamount(String thirdUid,Double amount);
+
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    PageResult<UserAccountDTO> queryUserAccByParam(UserAccountSearchBean param);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
index a43a761..18e921c 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
@@ -14,12 +14,21 @@
 import com.supwisdom.dlpay.framework.util.*;
 import com.supwisdom.dlpay.system.bean.PersonParamBean;
 import com.supwisdom.dlpay.system.service.UserDataService;
+import com.supwisdom.dlpay.water.bean.UserAccountSearchBean;
+import com.supwisdom.dlpay.water.pojo.UserAccountDTO;
+import org.hibernate.query.internal.NativeQueryImpl;
+import org.hibernate.transform.Transformers;
 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 javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.util.List;
 import java.util.Optional;
 
@@ -35,6 +44,8 @@
     private SystemUtilService systemUtilService;
     @Autowired
     private PersonIdentityDao personIdentityDao;
+    @PersistenceContext
+    private EntityManager em;
 
     @Override
     public PageResult<TPerson> getPersonsByKey(PersonParamBean param) {
@@ -191,7 +202,7 @@
         if (null == personIdentity) {
             throw new RuntimeException("未找到用户id为" + thirdUid + "的用户");
         }
-        personIdentity.setCoamount(personIdentity.getCoamount() == null ? amount : personIdentity.getCoamount() + amount);
+        personIdentity.setCoamount(personIdentity.getCoamount() == null ? amount : add(personIdentity.getCoamount(),amount));
         personIdentityDao.save(personIdentity);
         return personIdentity;
     }
@@ -202,8 +213,51 @@
         if (null == personIdentity) {
             throw new RuntimeException("未找到用户id为" + thirdUid + "的用户");
         }
-        personIdentity.setAccamount(personIdentity.getAccamount() == null ? amount : personIdentity.getAccamount() + amount);
+        personIdentity.setAccamount(personIdentity.getAccamount() == null ? amount : add(personIdentity.getAccamount(),amount));
         personIdentityDao.save(personIdentity);
         return personIdentity;
     }
+
+    @Override
+    public PageResult<UserAccountDTO> queryUserAccByParam(UserAccountSearchBean param) {
+        StringBuffer querySql = new StringBuffer("select t1.status,t1.third_uid cardno,t1.accamount,t1.coamount,t2.name username from tb_person_identity t1 left join tb_person t2 on t1.userid=t2.userid where 1=1");
+        StringBuffer countSql = new StringBuffer("select count(t1.userid) from tb_person_identity t1 left join tb_person t2 on t1.userid=t2.userid where 1=1");
+        if (!StringUtil.isEmpty(param.getCardno())) {
+            querySql.append(" and t1.third_uid like :cardno");
+            countSql.append(" and t1.third_uid like :cardno");
+        }
+        if (!StringUtil.isEmpty(param.getUsername())) {
+            querySql.append(" and t2.name like :username");
+            countSql.append(" and t2.name like :username");
+        }
+        Query query = em.createNativeQuery(querySql.toString());
+        Query countQuery = em.createNativeQuery(countSql.toString());
+        if (!StringUtil.isEmpty(param.getCardno())) {
+            query.setParameter("cardno", "%"+param.getCardno().trim()+"%");
+            countQuery.setParameter("cardno", "%"+param.getCardno().trim()+"%");
+        }
+        if (!StringUtil.isEmpty(param.getUsername())) {
+            query.setParameter("username", "%"+param.getUsername().trim()+"%");
+            countQuery.setParameter("username", "%"+param.getUsername().trim()+"%");
+        }
+        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(UserAccountDTO.class));
+        query.setFirstResult((param.getPageNo() - 1) * param.getPageSize());
+        query.setMaxResults(param.getPageSize());
+        BigInteger count = (BigInteger) countQuery.getSingleResult();
+        List<UserAccountDTO> list = query.getResultList();
+        list.forEach(user -> user.setNotaccamount(subtract(user.getCoamount(),user.getAccamount())));
+        return new PageResult<>(count.longValue(), list);
+    }
+
+    private double subtract(Double minuend,Double subtractor){
+        return new BigDecimal(String.valueOf(minuend))
+                .subtract(new BigDecimal(String.valueOf(subtractor)))
+                .doubleValue();
+    }
+
+    private double add(Double d1,Double d2){
+        return new BigDecimal(String.valueOf(d1)).add(
+                new BigDecimal(String.valueOf(d2))
+        ).doubleValue();
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/bean/TransdtlCountSearchBean.java b/src/main/java/com/supwisdom/dlpay/water/bean/TransdtlCountSearchBean.java
index 46e447e..faaed87 100644
--- a/src/main/java/com/supwisdom/dlpay/water/bean/TransdtlCountSearchBean.java
+++ b/src/main/java/com/supwisdom/dlpay/water/bean/TransdtlCountSearchBean.java
@@ -3,16 +3,16 @@
 import com.supwisdom.dlpay.system.bean.PageBean;
 
 public class TransdtlCountSearchBean extends PageBean {
-    private String transtime;
+    private String accdate;
     private String devicename;
     private Integer areano;
 
-    public String getTranstime() {
-        return transtime;
+    public String getAccdate() {
+        return accdate;
     }
 
-    public void setTranstime(String transtime) {
-        this.transtime = transtime;
+    public void setAccdate(String accdate) {
+        this.accdate = accdate;
     }
 
     public String getDevicename() {
diff --git a/src/main/java/com/supwisdom/dlpay/water/bean/TransdtlSearchBean.java b/src/main/java/com/supwisdom/dlpay/water/bean/TransdtlSearchBean.java
index 5b281e7..2ba5abe 100644
--- a/src/main/java/com/supwisdom/dlpay/water/bean/TransdtlSearchBean.java
+++ b/src/main/java/com/supwisdom/dlpay/water/bean/TransdtlSearchBean.java
@@ -4,18 +4,36 @@
 
 
 public class TransdtlSearchBean extends PageBean {
-    private String transtime;
+    private String transdate;
+    private String accdate;
     private String devicename;
     private String deviceno;
     private String username;
     private Integer areano;
+    private Boolean notacc;
 
-    public String getTranstime() {
-        return transtime;
+    public Boolean getNotacc() {
+        return notacc;
     }
 
-    public void setTranstime(String transtime) {
-        this.transtime = transtime;
+    public void setNotacc(Boolean notacc) {
+        this.notacc = notacc;
+    }
+
+    public String getTransdate() {
+        return transdate;
+    }
+
+    public void setTransdate(String transdate) {
+        this.transdate = transdate;
+    }
+
+    public String getAccdate() {
+        return accdate;
+    }
+
+    public void setAccdate(String accdate) {
+        this.accdate = accdate;
     }
 
     public String getDevicename() {
diff --git a/src/main/java/com/supwisdom/dlpay/water/bean/UserAccountSearchBean.java b/src/main/java/com/supwisdom/dlpay/water/bean/UserAccountSearchBean.java
new file mode 100644
index 0000000..afab99d
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/water/bean/UserAccountSearchBean.java
@@ -0,0 +1,24 @@
+package com.supwisdom.dlpay.water.bean;
+
+import com.supwisdom.dlpay.system.bean.PageBean;
+
+public class UserAccountSearchBean extends PageBean {
+    private String username;
+    private String cardno;
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getCardno() {
+        return cardno;
+    }
+
+    public void setCardno(String cardno) {
+        this.cardno = cardno;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/water/domain/TAccdtl.java b/src/main/java/com/supwisdom/dlpay/water/domain/TAccdtl.java
index 88265bb..275c951 100644
--- a/src/main/java/com/supwisdom/dlpay/water/domain/TAccdtl.java
+++ b/src/main/java/com/supwisdom/dlpay/water/domain/TAccdtl.java
@@ -31,7 +31,7 @@
     @Column(length = 32)
     private String userid;
 
-    @Column(name = "bankcardno", length = 32)
+    @Column(name = "citizencardno", length = 32)
     private String citizenCardno;
 
     @Column(length = 20)
diff --git a/src/main/java/com/supwisdom/dlpay/water/domain/TTransdtlCount.java b/src/main/java/com/supwisdom/dlpay/water/domain/TTransdtlCount.java
index 598b0ad..64e5b13 100644
--- a/src/main/java/com/supwisdom/dlpay/water/domain/TTransdtlCount.java
+++ b/src/main/java/com/supwisdom/dlpay/water/domain/TTransdtlCount.java
@@ -7,30 +7,23 @@
 @Table(name = "tb_transdtl_count",
         indexes = {@Index(name = "trasndtl_count_accdate", columnList = "accdate"),
                 @Index(name = "transdtl_count_areano", columnList = "areano"),
-                @Index(name = "transdtl_count_devicename", columnList = "devicename"),
-                @Index(name = "transdtl_count_idx", columnList = "accdate, areano, deviceno", unique = true)})
+                @Index(name = "transdtl_count_idx", columnList = "accdate, areano, deviceno,mode", unique = true)})
 @SequenceGenerator(name = "SEQ_TRANSDTL_COUNT", sequenceName = "SEQ_TRANSDTL_COUNT", allocationSize = 1, initialValue = 1000)
 public class TTransdtlCount {
     @Id
     @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_TRANSDTL_COUNT")
     @Column(name = "id", length = 18)
-    private String id;
+    private Integer id;
 
     @Column(name = "accdate", length = 8)
     private String accdate;
 
-    @Column(name = "areano", length = 32)
-    private String areano;
-
-    @Column(name = "areaname", length = 200)
-    private String areaname;
+    @Column(name = "areano")
+    private Integer areano;
 
     @Column(name = "deviceno", length = 8)
     private String deviceno;
 
-    @Column(name = "devicename", length = 200)
-    private String devicename;
-
     @Column(name = "mode", length = 20)
     private String mode;
 
@@ -40,14 +33,14 @@
     @Column(precision = 10, scale = 2)
     private Double amount;
 
-    @Column(name = "water_in_100ml", precision = 10)
-    private Integer waterSumHundredLitre;
+    @Column(name = "water", precision = 10)
+    private Integer water;
 
-    public String getId() {
+    public Integer getId() {
         return id;
     }
 
-    public void setId(String id) {
+    public void setId(Integer id) {
         this.id = id;
     }
 
@@ -59,22 +52,14 @@
         this.accdate = accdate;
     }
 
-    public String getAreano() {
+    public Integer getAreano() {
         return areano;
     }
 
-    public void setAreano(String areano) {
+    public void setAreano(Integer areano) {
         this.areano = areano;
     }
 
-    public String getAreaname() {
-        return areaname;
-    }
-
-    public void setAreaname(String areaname) {
-        this.areaname = areaname;
-    }
-
     public String getDeviceno() {
         return deviceno;
     }
@@ -83,14 +68,6 @@
         this.deviceno = deviceno;
     }
 
-    public String getDevicename() {
-        return devicename;
-    }
-
-    public void setDevicename(String devicename) {
-        this.devicename = devicename;
-    }
-
     public String getMode() {
         return mode;
     }
@@ -115,11 +92,11 @@
         this.amount = amount;
     }
 
-    public Integer getWaterSumHundredLitre() {
-        return waterSumHundredLitre;
+    public Integer getWater() {
+        return water;
     }
 
-    public void setWaterSumHundredLitre(Integer waterSumHundredLitre) {
-        this.waterSumHundredLitre = waterSumHundredLitre;
+    public void setWater(Integer water) {
+        this.water = water;
     }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/pay/PayInit.java b/src/main/java/com/supwisdom/dlpay/water/pay/PayInit.java
index c99b406..c928620 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pay/PayInit.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pay/PayInit.java
@@ -1,6 +1,9 @@
 package com.supwisdom.dlpay.water.pay;
 
 import com.supwisdom.dlpay.api.bean.ApiVersionResponse;
+import com.supwisdom.dlpay.framework.service.BusinessparaService;
+import com.supwisdom.dlpay.framework.util.Constants;
+import com.supwisdom.dlpay.framework.util.WaterBudinessConstants;
 import com.supwisdom.dlpay.paysdk.ApiLoginHelper;
 import com.supwisdom.dlpay.paysdk.proxy.ApiCommonProxy;
 import com.supwisdom.dlpay.paysdk.proxy.ApiLoginProxy;
@@ -19,10 +22,12 @@
 @EnableFeignClients(basePackages = "com.supwisdom.dlpay.paysdk")
 @ComponentScan(basePackages = {"com.supwisdom.dlpay.paysdk"})
 public class PayInit {
-    @Value("${water.appid}")
+
+    @Autowired
+    private BusinessparaService businessparaService;
+
     private  String appid;
 
-    @Value("${water.secret}")
     private  String secret;
 
     @Autowired
@@ -33,6 +38,8 @@
 
     @PostConstruct
     public void login() {
+        appid=businessparaService.findByParakey(WaterBudinessConstants.WATER_APPID).getParaval();
+        secret=businessparaService.findByParakey(WaterBudinessConstants.WATER_SECRET).getParaval();
         ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
         helper.login(appid,secret);
         ApiVersionResponse version = apiCommonProxy.apiVersion();
diff --git a/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java b/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
index 1eeb82f..17696e6 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
@@ -53,6 +53,16 @@
     @Async("waterPay")
     public void waterPay(Integer cobillno) {
         TCollectdtl collectdtl = collectdtlService.findByCobillnoForUpdate(cobillno);
+        if (TradeDict.PAY_MODE_CARD.equals(collectdtl.getMode())) {
+            waterCardPay(collectdtl);
+        } else if (TradeDict.PAY_MODE_QRCODE.equals(collectdtl.getMode())) {
+
+        } else {
+            logger.error("暂不支持的消费类型");
+        }
+    }
+
+    private void waterCardPay(TCollectdtl collectdtl) {
         //  是否已生成入账流水
         if (collectdtl.getEntryno() != null) {
             TAccdtl accdtl = accdtlService.findByBillno(collectdtl.getEntryno());
@@ -88,7 +98,7 @@
                         //  进行消费确认
                         payConfirm(accdtl);
                     } else if (TradeDict.DTL_STATUS_SUCCESS.equals(queryResult.getStatus())) {
-                        //  查询得到状态为success或fail，记录下状态
+                        //  查询得到状态为success，记录下状态
                         userDataService.updateAccamount(accdtl.getCitizenCardno(), accdtl.getAmount());
                         cofirmAcc(queryResult.getStatus(), accdtl.getBillno(), accdtl.getRefno());
                     } else if (TradeDict.DTL_STATUS_FAIL.equals(queryResult.getStatus())) {
@@ -175,6 +185,7 @@
             if (0 == queryResult.getRetcode()) {
                 accStatus = queryResult.getStatus();
                 if (TradeDict.DTL_STATUS_SUCCESS.equals(accStatus)) {
+                    accStatus = TradeDict.DTL_STATUS_SUCCESS;
                     userDataService.updateAccamount(initAccdtl.getCitizenCardno(), initAccdtl.getAmount());
                 }
             } else {
diff --git a/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlDTO.java b/src/main/java/com/supwisdom/dlpay/water/pojo/TAccdtlDTO.java
similarity index 67%
copy from src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlDTO.java
copy to src/main/java/com/supwisdom/dlpay/water/pojo/TAccdtlDTO.java
index 76c4ea5..0c73da9 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlDTO.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pojo/TAccdtlDTO.java
@@ -1,47 +1,29 @@
 package com.supwisdom.dlpay.water.pojo;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-
-@Entity
-public class TTransdtlDTO {
-    @Id
-    @Column
+public class TAccdtlDTO {
     private String billno;
-    @Column
     private String deviceno;
-    @Column
     private String devicename;
-    @Column
-    private Integer waterSumHundredLitre;
-    @Column
+    private Integer watersumhundredlitre;
     private Double amount;
-    @Column
     private String username;
-    @Column
-    private String bankcardno;
-    @Column
+    private String citizencardno;
     private String transdate;
-    @Column
+    private String transtime;
     private String mode;
-    @Column
     private String status;
-    @Column
     private String areaname;
-    @Column
     private Integer areano;
-    @Column
     private String cardphyid;
+    private String accdate;
+    private String refno;
 
-
-    public String getCardphyid() {
-        return cardphyid;
+    public String getTranstime() {
+        return transtime;
     }
 
-    public void setCardphyid(String cardphyid) {
-        this.cardphyid = cardphyid;
+    public void setTranstime(String transtime) {
+        this.transtime = transtime;
     }
 
     public String getBillno() {
@@ -68,12 +50,12 @@
         this.devicename = devicename;
     }
 
-    public Integer getWaterSumHundredLitre() {
-        return waterSumHundredLitre;
+    public Integer getWatersumhundredlitre() {
+        return watersumhundredlitre;
     }
 
-    public void setWaterSumHundredLitre(Integer waterSumHundredLitre) {
-        this.waterSumHundredLitre = waterSumHundredLitre;
+    public void setWatersumhundredlitre(Integer watersumhundredlitre) {
+        this.watersumhundredlitre = watersumhundredlitre;
     }
 
     public Double getAmount() {
@@ -92,12 +74,12 @@
         this.username = username;
     }
 
-    public String getBankcardno() {
-        return bankcardno;
+    public String getCitizencardno() {
+        return citizencardno;
     }
 
-    public void setBankcardno(String bankcardno) {
-        this.bankcardno = bankcardno;
+    public void setCitizencardno(String citizencardno) {
+        this.citizencardno = citizencardno;
     }
 
     public String getTransdate() {
@@ -139,4 +121,28 @@
     public void setAreano(Integer areano) {
         this.areano = areano;
     }
+
+    public String getCardphyid() {
+        return cardphyid;
+    }
+
+    public void setCardphyid(String cardphyid) {
+        this.cardphyid = cardphyid;
+    }
+
+    public String getAccdate() {
+        return accdate;
+    }
+
+    public void setAccdate(String accdate) {
+        this.accdate = accdate;
+    }
+
+    public String getRefno() {
+        return refno;
+    }
+
+    public void setRefno(String refno) {
+        this.refno = refno;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlDTO.java b/src/main/java/com/supwisdom/dlpay/water/pojo/TCollectdtlDTO.java
similarity index 75%
rename from src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlDTO.java
rename to src/main/java/com/supwisdom/dlpay/water/pojo/TCollectdtlDTO.java
index 76c4ea5..0c4079d 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlDTO.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pojo/TCollectdtlDTO.java
@@ -6,10 +6,10 @@
 
 
 @Entity
-public class TTransdtlDTO {
+public class TCollectdtlDTO {
     @Id
     @Column
-    private String billno;
+    private String cobillno;
     @Column
     private String deviceno;
     @Column
@@ -21,7 +21,7 @@
     @Column
     private String username;
     @Column
-    private String bankcardno;
+    private String citizencardno;
     @Column
     private String transdate;
     @Column
@@ -34,7 +34,26 @@
     private Integer areano;
     @Column
     private String cardphyid;
+    @Column
+    private String accdate;
+    @Column
+    private String entryno;
 
+    public String getEntryno() {
+        return entryno;
+    }
+
+    public void setEntryno(String entryno) {
+        this.entryno = entryno;
+    }
+
+    public String getAccdate() {
+        return accdate;
+    }
+
+    public void setAccdate(String accdate) {
+        this.accdate = accdate;
+    }
 
     public String getCardphyid() {
         return cardphyid;
@@ -44,12 +63,12 @@
         this.cardphyid = cardphyid;
     }
 
-    public String getBillno() {
-        return billno;
+    public String getCobillno() {
+        return cobillno;
     }
 
-    public void setBillno(String billno) {
-        this.billno = billno;
+    public void setCobillno(String cobillno) {
+        this.cobillno = cobillno;
     }
 
     public String getDeviceno() {
@@ -92,12 +111,12 @@
         this.username = username;
     }
 
-    public String getBankcardno() {
-        return bankcardno;
+    public String getCitizencardno() {
+        return citizencardno;
     }
 
-    public void setBankcardno(String bankcardno) {
-        this.bankcardno = bankcardno;
+    public void setCitizencardno(String citizencardno) {
+        this.citizencardno = citizencardno;
     }
 
     public String getTransdate() {
diff --git a/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlCountDTO.java b/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlCountDTO.java
new file mode 100644
index 0000000..4325164
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlCountDTO.java
@@ -0,0 +1,76 @@
+package com.supwisdom.dlpay.water.pojo;
+
+import java.math.BigInteger;
+
+public class TTransdtlCountDTO {
+
+    private String accdate;
+
+    private Integer areano;
+
+    private String deviceno;
+
+    private String mode;
+
+    private BigInteger count;
+
+    private Double amount;
+
+    private BigInteger water;
+
+    public String getAccdate() {
+        return accdate;
+    }
+
+    public void setAccdate(String accdate) {
+        this.accdate = accdate;
+    }
+
+    public Integer getAreano() {
+        return areano;
+    }
+
+    public void setAreano(Integer areano) {
+        this.areano = areano;
+    }
+
+    public String getDeviceno() {
+        return deviceno;
+    }
+
+    public void setDeviceno(String deviceno) {
+        this.deviceno = deviceno;
+    }
+
+    public String getMode() {
+        return mode;
+    }
+
+    public void setMode(String mode) {
+        this.mode = mode;
+    }
+
+    public BigInteger getCount() {
+        return count;
+    }
+
+    public void setCount(BigInteger count) {
+        this.count = count;
+    }
+
+    public Double getAmount() {
+        return amount;
+    }
+
+    public void setAmount(Double amount) {
+        this.amount = amount;
+    }
+
+    public BigInteger getWater() {
+        return water;
+    }
+
+    public void setWater(BigInteger water) {
+        this.water = water;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlCountVO.java b/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlCountVO.java
new file mode 100644
index 0000000..e338ef2
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlCountVO.java
@@ -0,0 +1,94 @@
+package com.supwisdom.dlpay.water.pojo;
+
+public class TTransdtlCountVO {
+    private Integer id;
+    private String accdate;
+    private Integer areano;
+    private String deviceno;
+    private String mode;
+    private Integer count;
+    private Double amount;
+    private Integer water;
+    private String devicename;
+    private String areaname;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getAccdate() {
+        return accdate;
+    }
+
+    public void setAccdate(String accdate) {
+        this.accdate = accdate;
+    }
+
+    public Integer getAreano() {
+        return areano;
+    }
+
+    public void setAreano(Integer areano) {
+        this.areano = areano;
+    }
+
+    public String getDeviceno() {
+        return deviceno;
+    }
+
+    public void setDeviceno(String deviceno) {
+        this.deviceno = deviceno;
+    }
+
+    public String getMode() {
+        return mode;
+    }
+
+    public void setMode(String mode) {
+        this.mode = mode;
+    }
+
+    public Integer getCount() {
+        return count;
+    }
+
+    public void setCount(Integer count) {
+        this.count = count;
+    }
+
+    public Double getAmount() {
+        return amount;
+    }
+
+    public void setAmount(Double amount) {
+        this.amount = amount;
+    }
+
+    public Integer getWater() {
+        return water;
+    }
+
+    public void setWater(Integer water) {
+        this.water = water;
+    }
+
+    public String getDevicename() {
+        return devicename;
+    }
+
+    public void setDevicename(String devicename) {
+        this.devicename = devicename;
+    }
+
+    public String getAreaname() {
+        return areaname;
+    }
+
+    public void setAreaname(String areaname) {
+        this.areaname = areaname;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/water/pojo/UserAccountDTO.java b/src/main/java/com/supwisdom/dlpay/water/pojo/UserAccountDTO.java
new file mode 100644
index 0000000..f38944a
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/water/pojo/UserAccountDTO.java
@@ -0,0 +1,58 @@
+package com.supwisdom.dlpay.water.pojo;
+
+public class UserAccountDTO {
+    private String username;
+    private String cardno;
+    private Double notaccamount;
+    private Double accamount;
+    private Double coamount;
+    private String status;
+
+    public Double getAccamount() {
+        return accamount;
+    }
+
+    public void setAccamount(Double accamount) {
+        this.accamount = accamount;
+    }
+
+    public Double getCoamount() {
+        return coamount;
+    }
+
+    public void setCoamount(Double coamount) {
+        this.coamount = coamount;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getCardno() {
+        return cardno;
+    }
+
+    public void setCardno(String cardno) {
+        this.cardno = cardno;
+    }
+
+    public Double getNotaccamount() {
+        return notaccamount;
+    }
+
+    public void setNotaccamount(Double notaccamount) {
+        this.notaccamount = notaccamount;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/water/service/AccdtlService.java b/src/main/java/com/supwisdom/dlpay/water/service/AccdtlService.java
index 8580f45..e31d939 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/AccdtlService.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/AccdtlService.java
@@ -3,7 +3,10 @@
 
 import com.supwisdom.dlpay.api.bean.ConfirmAccParam;
 import com.supwisdom.dlpay.api.bean.InitAccParam;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.water.bean.TransdtlSearchBean;
 import com.supwisdom.dlpay.water.domain.TAccdtl;
+import com.supwisdom.dlpay.water.pojo.TAccdtlDTO;
 import org.springframework.transaction.annotation.Transactional;
 
 public interface AccdtlService {
@@ -18,4 +21,7 @@
 
     @Transactional(rollbackFor = Exception.class)
     TAccdtl findByBillno(String billno);
+
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    PageResult<TAccdtlDTO> queryAccdtlByParam(TransdtlSearchBean param);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java b/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java
index 9a38e4c..683c3f9 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java
@@ -1,14 +1,14 @@
 package com.supwisdom.dlpay.water.service;
 
 import com.supwisdom.dlpay.framework.util.PageResult;
-import com.supwisdom.dlpay.water.QrcodeQueryRequest;
 import com.supwisdom.dlpay.water.UploadRecordRequest;
 import com.supwisdom.dlpay.water.UserAuthRequest;
 import com.supwisdom.dlpay.water.bean.TransdtlCountSearchBean;
 import com.supwisdom.dlpay.water.domain.TCollectdtl;
 import com.supwisdom.dlpay.water.domain.TTransdtlCount;
-import com.supwisdom.dlpay.water.pojo.TTransdtlDTO;
+import com.supwisdom.dlpay.water.pojo.TCollectdtlDTO;
 import com.supwisdom.dlpay.water.bean.TransdtlSearchBean;
+import com.supwisdom.dlpay.water.pojo.TTransdtlCountVO;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
@@ -28,14 +28,17 @@
     TCollectdtl userAuth(UserAuthRequest param);
 
     @Transactional(rollbackFor = Exception.class)
-    PageResult<TTransdtlDTO> queryTransdtlDTOByParam(TransdtlSearchBean param);
+    PageResult<TCollectdtlDTO> queryTransdtlDTOByParam(TransdtlSearchBean param);
 
     @Transactional(rollbackFor = Exception.class,readOnly = true)
-    PageResult<TTransdtlCount> queryTransdtlCountByParam(TransdtlCountSearchBean param);
+    PageResult<TTransdtlCountVO> queryTransdtlCountByParam(TransdtlCountSearchBean param);
 
     @Transactional(rollbackFor = Exception.class)
     List<TCollectdtl> queryTransdtlNotEntry();
 
     @Transactional(rollbackFor = Exception.class)
     TCollectdtl findByCobillnoForUpdate(Integer cobillno);
+
+    @Transactional(rollbackFor = Exception.class)
+    void generateCountdtl(String accdate);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/service/impl/AccdtlServiceImpl.java b/src/main/java/com/supwisdom/dlpay/water/service/impl/AccdtlServiceImpl.java
index 54033bc..16b3a5d 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/impl/AccdtlServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/impl/AccdtlServiceImpl.java
@@ -3,17 +3,29 @@
 import com.supwisdom.dlpay.api.bean.ConfirmAccParam;
 import com.supwisdom.dlpay.api.bean.InitAccParam;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.framework.util.TradeDict;
+import com.supwisdom.dlpay.water.bean.TransdtlSearchBean;
 import com.supwisdom.dlpay.water.dao.AccdtlDao;
 import com.supwisdom.dlpay.water.dao.CollectdtlDao;
 import com.supwisdom.dlpay.water.domain.TAccdtl;
 import com.supwisdom.dlpay.water.domain.TCollectdtl;
+import com.supwisdom.dlpay.water.pojo.TAccdtlDTO;
 import com.supwisdom.dlpay.water.service.AccdtlService;
+import org.hibernate.query.internal.NativeQueryImpl;
+import org.hibernate.transform.Transformers;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import java.math.BigInteger;
+import java.util.List;
+
 
 @Service
 public class AccdtlServiceImpl implements AccdtlService {
@@ -29,6 +41,9 @@
     @Autowired
     private SystemUtilService systemUtilService;
 
+    @PersistenceContext
+    private EntityManager em;
+
     @Override
     public TAccdtl initAcc(InitAccParam param) {
         TAccdtl accdtl = accdtlDao.findByBillnoForUpdate(param.getBillno());
@@ -103,4 +118,85 @@
         }
         return accdtl;
     }
+
+    @Override
+    public PageResult<TAccdtlDTO> queryAccdtlByParam(TransdtlSearchBean param) {
+        StringBuffer querySql = new StringBuffer("select t1.billno,t1.amount,t1.citizencardno,t1.cardphyid,t1.deviceno,t1.mode,t1.status,t1.transdate,t1.refno,t1.transtime,t1.accdate,t1.water_in_100ml watersumhundredlitre,t1.name username,t2.devicename,t2.areaname,t2.areano " +
+                "from (select dtl.*,person.name from tb_accentrydtl dtl left join tb_person person on dtl.userid = person.userid) t1," +
+                "(select device.deviceno,device.devicename,area.areaname,area.areano from tb_device device,tb_area area where device.areano = area.areano) t2 " +
+                "where t1.deviceno = t2.deviceno");
+        StringBuffer countSql = new StringBuffer("select count(billno) " +
+                "from (select dtl.*,person.name from tb_accentrydtl dtl left join tb_person person on dtl.userid = person.userid) t1," +
+                "(select device.deviceno,device.devicename,area.areaname,area.areano from tb_device device,tb_area area where device.areano = area.areano) t2 " +
+                "where t1.deviceno = t2.deviceno");
+        if (!StringUtil.isEmpty(param.getTransdate())) {
+            querySql.append(" and transdate >= :mintransdate");
+            querySql.append(" and transdate <= :maxtransdate");
+
+            countSql.append(" and transdate >= :mintransdate");
+            countSql.append(" and transdate <= :maxtransdate");
+        }
+        if (!StringUtil.isEmpty(param.getAccdate())) {
+            querySql.append(" and accdate >= :minaccdate");
+            querySql.append(" and accdate <= :maxaccdate");
+
+            countSql.append(" and accdate >= :minaccdate");
+            countSql.append(" and accdate <= :maxaccdate");
+        }
+        if (!StringUtil.isEmpty(param.getUsername())) {
+            querySql.append(" and name like :username");
+            countSql.append(" and name like :username");
+        }
+        if (!StringUtil.isEmpty(param.getDeviceno())) {
+            querySql.append(" and t1.deviceno like :deviceno");
+            countSql.append(" and t1.deviceno like :deviceno");
+        }
+        if (!StringUtil.isEmpty(param.getDevicename())) {
+            querySql.append(" and devicename like :devicename");
+            countSql.append(" and devicename like :devicename");
+        }
+        if (null != param.getAreano()) {
+            querySql.append(" and areano =:areano");
+            countSql.append(" and areano =:areano");
+        }
+        querySql.append(" order by billno desc");
+        Query query = em.createNativeQuery(querySql.toString());
+        Query countQuery = em.createNativeQuery(countSql.toString());
+        if (!StringUtil.isEmpty(param.getTransdate())) {
+            String[] timerange = param.getTransdate().replace("-", "").split("  ");
+            query.setParameter("mintransdate", timerange[0]);
+            query.setParameter("maxtransdate", timerange[1]);
+            countQuery.setParameter("mintransdate", timerange[0]);
+            countQuery.setParameter("maxtransdate", timerange[1]);
+        }
+        if (!StringUtil.isEmpty(param.getAccdate())) {
+            String[] timerange = param.getAccdate().replace("-", "").split("  ");
+            query.setParameter("minaccdate", timerange[0]);
+            query.setParameter("maxaccdate", timerange[1]);
+            countQuery.setParameter("minaccdate", timerange[0]);
+            countQuery.setParameter("maxaccdate", timerange[1]);
+        }
+        if (!StringUtil.isEmpty(param.getUsername())) {
+            query.setParameter("username", "%" + param.getUsername().trim() + "%");
+            countQuery.setParameter("username", "%" + param.getUsername().trim() + "%");
+        }
+        if (!StringUtil.isEmpty(param.getDeviceno())) {
+            query.setParameter("deviceno", "%" + param.getDeviceno().trim() + "%");
+            countQuery.setParameter("deviceno", "%" + param.getDeviceno().trim() + "%");
+        }
+        if (!StringUtil.isEmpty(param.getDevicename())) {
+            query.setParameter("devicename", "%" + param.getDevicename().trim() + "%");
+            countQuery.setParameter("devicename", "%" + param.getDevicename().trim() + "%");
+        }
+        if (null != param.getAreano()) {
+            query.setParameter("areano", param.getAreano());
+            countQuery.setParameter("areano", param.getAreano());
+        }
+        query.setFirstResult((param.getPageNo() - 1)*param.getPageSize());
+        query.setMaxResults(param.getPageSize());
+        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(TAccdtlDTO.class));
+        List<TAccdtlDTO> list = query.getResultList();
+        BigInteger count = (BigInteger) countQuery.getSingleResult();
+        return new PageResult<>(count.longValue(), list);
+    }
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/WaterManagerApplication.kt b/src/main/kotlin/com/supwisdom/dlpay/WaterManagerApplication.kt
index a182b93..867d471 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/WaterManagerApplication.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/WaterManagerApplication.kt
@@ -1,9 +1,7 @@
 package com.supwisdom.dlpay
 
 import io.lettuce.core.ReadFrom
-import org.bouncycastle.crypto.tls.ConnectionEnd.server
 import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.beans.factory.annotation.Value
 import org.springframework.boot.autoconfigure.SpringBootApplication
 import org.springframework.boot.autoconfigure.data.redis.RedisProperties
 import org.springframework.boot.runApplication
@@ -23,6 +21,7 @@
 
 
 @Configuration
+@EnableScheduling
 @EnableRedisRepositories
 class AppConfig {
 
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/controller/api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/water/controller/api_controller.kt
index 67345a9..73a42b8 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/controller/api_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/controller/api_controller.kt
@@ -1,13 +1,11 @@
 package com.supwisdom.dlpay.water.controller
 
-import com.supwisdom.dlpay.api.bean.CitizenCardPayinitParam
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
 import com.supwisdom.dlpay.framework.service.BusinessparaService
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.*
 import com.supwisdom.dlpay.system.service.UserDataService
 import com.supwisdom.dlpay.water.*
-import com.supwisdom.dlpay.water.domain.TAccdtl
 import com.supwisdom.dlpay.water.domain.TCollectdtl
 import com.supwisdom.dlpay.water.pay.WaterPayAsyncTask
 import com.supwisdom.dlpay.water.service.AccdtlService
@@ -97,7 +95,7 @@
             }
             //2. 通过 deviceno 查询设备费率参数
             val deviceParam = deviceService.getParaMapByDeviceno(param.deviceno)
-            //3. 创建 transdtl 记录初始流水
+            //3. 创建 collectdtl 记录初始流水
             val trans = TCollectdtl().apply {
                 mode = TradeDict.PAY_MODE_CARD
                 transDate = param.termdate
@@ -204,26 +202,26 @@
 
     @PostMapping("/uploadrecord")
     fun transdtlUpload(param: UploadRecordRequest): ResponseEntity<Any> {
-        // 1. 根据 cobillno 查询 transdtl , 并加锁
-            val querycodtl = collectdtlService.queryTrans(param.cobillno)
+        // 1. 根据 cobillno 查询 collectdtl , 并加锁
+        val querycodtl = collectdtlService.queryTrans(param.cobillno)
                 ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
                         .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "采集流水号未找到"))
-            //  流水是否重复上传
-            if (!querycodtl.uploadStatus) {
-                val dtl = collectdtlService.saveDeviceDtlData(param)
-                userDataService.updateCoamount(dtl.citizenCardno, param.amount/100.0)
-                //  是否立即扣费
-                if (param.amount >= deviceService.getParaMapByDeviceno(param.deviceno)[WaterDeviceParam.imdDecThreshold]!!.toInt()) {
-                    //  刷卡消费
-                    if (TradeDict.PAY_MODE_CARD == dtl.mode) {
-                        //  立即异步扣费
-                        waterPayAsyncTask.waterPay(querycodtl.cobillno)
-                    }
+        //  流水是否重复上传
+        if (!querycodtl.uploadStatus) {
+            val dtl = collectdtlService.saveDeviceDtlData(param)
+            userDataService.updateCoamount(dtl.citizenCardno, param.amount / 100.0)
+            //  是否立即扣费
+            if (param.amount >= deviceService.getParaMapByDeviceno(param.deviceno)[WaterDeviceParam.imdDecThreshold]!!.toInt()) {
+                //  刷卡消费
+                if (TradeDict.PAY_MODE_CARD == dtl.mode) {
+                    //  立即异步扣费
+                    waterPayAsyncTask.waterPay(querycodtl.cobillno)
                 }
-                return ResponseEntity.ok(ResponseBodyBuilder.create().data(WaterDeviceParam.cobillNo, dtl.cobillno)
-                        .success())
             }
-            return ResponseEntity.ok(ResponseBodyBuilder.create().data(WaterDeviceParam.cobillNo, querycodtl.cobillno)
+            return ResponseEntity.ok(ResponseBodyBuilder.create().data(WaterDeviceParam.cobillNo, dtl.cobillno)
                     .success())
+        }
+        return ResponseEntity.ok(ResponseBodyBuilder.create().data(WaterDeviceParam.cobillNo, querycodtl.cobillno)
+                .success())
     }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/controller/water_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/water/controller/water_controller.kt
index 4cf3e21..3fbb271 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/controller/water_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/controller/water_controller.kt
@@ -3,18 +3,12 @@
 import com.supwisdom.dlpay.api.bean.JsonResult
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
 import com.supwisdom.dlpay.framework.util.*
+import com.supwisdom.dlpay.system.service.UserDataService
 import com.supwisdom.dlpay.util.WebCheckException
 import com.supwisdom.dlpay.water.bean.*
-import com.supwisdom.dlpay.water.domain.TDevice
-import com.supwisdom.dlpay.water.domain.TArea
-import com.supwisdom.dlpay.water.pojo.TTransdtlDTO
-import com.supwisdom.dlpay.water.service.DeviceService
-import com.supwisdom.dlpay.water.service.AreaService
-import com.supwisdom.dlpay.water.service.CollectdtlService
-import com.supwisdom.dlpay.water.domain.TAreaparaGroup
-import com.supwisdom.dlpay.water.domain.TTransdtlCount
-import com.supwisdom.dlpay.water.pojo.TAreaparaBindDTO
-import com.supwisdom.dlpay.water.service.TAreaparaService
+import com.supwisdom.dlpay.water.domain.*
+import com.supwisdom.dlpay.water.pojo.*
+import com.supwisdom.dlpay.water.service.*
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
 import org.springframework.stereotype.Controller
@@ -77,7 +71,7 @@
 
     @GetMapping("/region/areano")
     @ResponseBody
-    fun queryAreaByAreano(@RequestParam("areano")areano: Int): PageResult<TArea> {
+    fun queryAreaByAreano(@RequestParam("areano") areano: Int): PageResult<TArea> {
         try {
             if (areano < 0) {
                 return PageResult(WaterErrorCode.REQUEST_DATA_ERROR, "请求参数错误")
@@ -360,22 +354,24 @@
 }
 
 @Controller
-class TransdtlController {
+class CollectdtlController {
     @Autowired
     private lateinit var collectdtlService: CollectdtlService
 
-    @GetMapping("/transdtl/index")
-    fun dtlIndexView() = "system/transdtl/index"
+    @GetMapping("/collectdtl/index")
+    fun dtlIndexView() = "system/collectdtl/index"
 
-    @GetMapping("/transdtl/list")
+    @GetMapping("/collectdtl/list")
     @ResponseBody
     fun queryTransdtl(@RequestParam("devicename", required = false) devicename: String,
                       @RequestParam("deviceno", required = false) deviceno: String,
                       @RequestParam("areano", required = false) areanoStr: String,
-                      @RequestParam("transtime", required = false) transtime: String,
+                      @RequestParam("transdate", required = false) transdate: String,
+                      @RequestParam("accdate", required = false) accdate: String,
                       @RequestParam("username", required = false) username: String,
+                      @RequestParam("notacc", required = false) notacc: Boolean,
                       @RequestParam("page", defaultValue = "1", required = false) pageNo: Int,
-                      @RequestParam("limit", defaultValue = "10", required = false) pageSize: Int): PageResult<TTransdtlDTO> {
+                      @RequestParam("limit", defaultValue = "10", required = false) pageSize: Int): PageResult<TCollectdtlDTO> {
         try {
             if (pageNo < 1 || pageSize < 1) {
                 return PageResult(WaterErrorCode.REQUEST_DATA_ERROR, "请求参数错误")
@@ -393,12 +389,14 @@
                 this.deviceno = deviceno
                 this.areano = areano
                 this.username = username
-                this.transtime = transtime
+                this.transdate = transdate
+                this.accdate = accdate
+                this.notacc = notacc
             }
             collectdtlService.queryTransdtlDTOByParam(searchBean)?.let {
                 return it
             }
-            return PageResult(WaterErrorCode.DATA_NOTFOUND_ERROR, "设备未找到")
+            return PageResult(WaterErrorCode.DATA_NOTFOUND_ERROR, "采集流水未找到")
         } catch (ex: Exception) {
             return PageResult(WaterErrorCode.PROCESS_ERROR, "服务器繁忙,请稍后再试")
         }
@@ -411,9 +409,9 @@
     @ResponseBody
     fun queryDtlCount(@RequestParam("devicename", required = false) devicename: String?,
                       @RequestParam("areano", required = false) areanoStr: String?,
-                      @RequestParam("transtime", required = false) transtime: String?,
+                      @RequestParam("accdate", required = false) accdate: String?,
                       @RequestParam("page", defaultValue = "1", required = false) pageNo: Int,
-                      @RequestParam("limit", defaultValue = "10", required = false) pageSize: Int): PageResult<TTransdtlCount> {
+                      @RequestParam("limit", defaultValue = "10", required = false) pageSize: Int): PageResult<TTransdtlCountVO> {
         try {
             if (pageNo < 1 || pageSize < 1) {
                 return PageResult(WaterErrorCode.REQUEST_DATA_ERROR, "请求参数错误")
@@ -429,7 +427,7 @@
                 this.pageSize = pageSize
                 this.devicename = devicename
                 this.areano = areano
-                this.transtime = transtime
+                this.accdate = accdate
             }
             collectdtlService.queryTransdtlCountByParam(searchBean)?.let {
                 return it
@@ -490,8 +488,8 @@
     @PostMapping("/areapara/editareapara")
     @ResponseBody
     fun editAreapara(@RequestBody param: HashMap<String, String>?): JsonResult {
-        val groupidHtmlKey = "form_areapara_groupid"   //页面上传来groupid的KEY
-        val groupnameHtmlKey = "form_areapara_groupname" //页面上传来groupname的KEY
+        val groupidHtmlKey = "waterform_areapara_groupid"   //页面上传来groupid的KEY
+        val groupnameHtmlKey = "waterform_areapara_groupname" //页面上传来groupname的KEY
         if (null == param || !NumberUtil.isDigits(param[groupidHtmlKey]) || StringUtil.isEmpty(groupnameHtmlKey)) {
             return JsonResult.error("参数传递错误")
         }
@@ -614,4 +612,79 @@
             PageResult(WaterErrorCode.PROCESS_ERROR, "服务器繁忙,请稍后再试")
         }
     }
-}
\ No newline at end of file
+}
+
+@Controller
+class AccdtlController {
+
+    @Autowired
+    private lateinit var accdtlService: AccdtlService
+
+    @GetMapping("/accdtl/index")
+    fun dtlIndexView() = "system/accdtl/index"
+
+    @GetMapping("/accdtl/list")
+    @ResponseBody
+    fun queryAccdtl(@RequestParam("devicename", required = false) devicename: String?,
+                    @RequestParam("deviceno", required = false) deviceno: String?,
+                    @RequestParam("areano", required = false) areano: Int?,
+                    @RequestParam("transdate", required = false) transdate: String?,
+                    @RequestParam("accdate", required = false) accdate: String?,
+                    @RequestParam("username", required = false) username: String?,
+                    @RequestParam("page", defaultValue = "1", required = false) pageNo: Int?,
+                    @RequestParam("limit", defaultValue = "10", required = false) pageSize: Int?): PageResult<TAccdtlDTO> {
+        try {
+            if (pageNo!! < 1 || pageSize!! < 1) {
+                return PageResult(WaterErrorCode.REQUEST_DATA_ERROR, "请求参数错误")
+            }
+            val searchBean = TransdtlSearchBean().apply {
+                this.pageNo = pageNo
+                this.pageSize = pageSize
+                this.devicename = devicename
+                this.deviceno = deviceno
+                this.areano = areano
+                this.username = username
+                this.transdate = transdate
+                this.accdate = accdate
+            }
+            accdtlService.queryAccdtlByParam(searchBean)?.let {
+                return it
+            }
+            return PageResult(WaterErrorCode.DATA_NOTFOUND_ERROR, "采集流水未找到")
+        } catch (ex: Exception) {
+            return PageResult(WaterErrorCode.PROCESS_ERROR, "系统繁忙，请稍后重试")
+        }
+    }
+}
+
+@Controller
+class UserAccountController {
+    @Autowired
+    private lateinit var userDataService: UserDataService
+
+    @GetMapping("useracc/index")
+    fun userAccIndexView() = "system/useraccount/index"
+
+    @GetMapping("useracc/list")
+    @ResponseBody
+    fun queryUserAcc(@RequestParam("username", required = false) username: String?,
+                     @RequestParam("cardno", required = false) cardno: String?,
+                     @RequestParam("page", defaultValue = "1", required = false) pageNo: Int?,
+                     @RequestParam("limit", defaultValue = "10", required = false) pageSize: Int?): PageResult<UserAccountDTO> {
+        try {
+            if (pageNo!! < 1 || pageSize!! < 1) {
+                return PageResult(WaterErrorCode.REQUEST_DATA_ERROR, "请求参数错误")
+            }
+            val searchBean = UserAccountSearchBean().apply {
+                this.username = username
+                this.cardno = cardno
+            }
+            userDataService.queryUserAccByParam(searchBean)?.let {
+                return it
+            }
+            return PageResult(WaterErrorCode.DATA_NOTFOUND_ERROR, "采集流水未找到")
+        } catch (ex: Exception) {
+            return PageResult(WaterErrorCode.PROCESS_ERROR, "系统繁忙，请稍后重试")
+        }
+    }
+}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/scheduler_task.kt b/src/main/kotlin/com/supwisdom/dlpay/water/scheduler_task.kt
index 60c2dd8..affc99e 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/scheduler_task.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/scheduler_task.kt
@@ -1,16 +1,16 @@
 package com.supwisdom.dlpay.water
 
+import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.paysdk.proxy.ApiLoginProxy
 import com.supwisdom.dlpay.water.pay.WaterPayAsyncTask
 import com.supwisdom.dlpay.water.service.CollectdtlService
 import mu.KotlinLogging
 import net.javacrumbs.shedlock.core.SchedulerLock
 import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.scheduling.annotation.EnableScheduling
 import org.springframework.scheduling.annotation.Scheduled
 import org.springframework.stereotype.Component
 
 @Component
-@EnableScheduling
 class CollectdtlQueryResultSchedulerTask {
 
     private val logger = KotlinLogging.logger { }
@@ -21,7 +21,7 @@
     @Autowired
     private lateinit var waterPayAsyncTask: WaterPayAsyncTask
 
-    @Scheduled(cron = "*/30 * * * * ?")
+    @Scheduled(cron = "0 */10 * * * ?")
     @SchedulerLock(name = "dealCollectdtlAccountEntry", lockAtMostForString = "PT10M")
     fun queryCollectdtlResult() {
         val collectdtlList = collectdtlService.queryTransdtlNotEntry()
@@ -32,4 +32,36 @@
             waterPayAsyncTask.waterPay(collectdtl.cobillno)
         }
     }
+}
+
+@Component
+class GenerateCountdtlSchedulerTask{
+    @Autowired
+    private lateinit var collectdtlService: CollectdtlService
+
+    @Autowired
+    private lateinit var systemUtilsService: SystemUtilService
+    @Scheduled(cron = "0 0 1 * * ?")
+    @SchedulerLock(name = "generateCountdtl",lockAtMostForString = "PT10M")
+    fun generateCountdtl() {
+        collectdtlService.generateCountdtl(systemUtilsService.sysdatetime.hostdate)
+    }
+}
+
+@Component
+class RefreshJwtSchedulerTask {
+
+    private val logger = KotlinLogging.logger { }
+
+    @Autowired
+    private lateinit var apiLoginProxy: ApiLoginProxy
+
+    @Scheduled(cron = "0 */20 * * * ?")
+    @SchedulerLock(name = "refreshJwt", lockAtMostForString = "PT10M")
+    fun refreshJwt() {
+        val response = apiLoginProxy.refresh()
+        if (response.retcode != 0) {
+            logger.error { "刷新jwt失败!状态码:"+response.retcode+" 错误信息:"+response.retmsg}
+        }
+    }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt b/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt
index 7799cc5..bf1480d 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt
@@ -10,17 +10,21 @@
 import com.supwisdom.dlpay.water.bean.TransdtlCountSearchBean
 import com.supwisdom.dlpay.water.dao.CollectdtlDao
 import com.supwisdom.dlpay.water.domain.TCollectdtl
-import com.supwisdom.dlpay.water.pojo.TTransdtlDTO
+import com.supwisdom.dlpay.water.pojo.TCollectdtlDTO
 import com.supwisdom.dlpay.water.bean.TransdtlSearchBean
-import com.supwisdom.dlpay.water.dao.AccdtlDao
 import com.supwisdom.dlpay.water.dao.TransdtlCountDao
 import com.supwisdom.dlpay.water.domain.TTransdtlCount
+import com.supwisdom.dlpay.water.pojo.TTransdtlCountDTO
+import com.supwisdom.dlpay.water.pojo.TTransdtlCountVO
 import mu.KotlinLogging
+import org.hibernate.query.internal.NativeQueryImpl
+import org.hibernate.transform.Transformers
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.data.domain.PageRequest
 import org.springframework.data.jpa.domain.Specification
 import org.springframework.stereotype.Service
 import java.lang.RuntimeException
+import java.math.BigInteger
 import java.util.ArrayList
 import javax.persistence.EntityManager
 import javax.persistence.criteria.Predicate
@@ -76,25 +80,38 @@
         return dtl
     }
 
-    override fun queryTransdtlDTOByParam(param: TransdtlSearchBean): PageResult<TTransdtlDTO>? {
-        val sql = StringBuffer("select t1.cobillno,t1.amount,t1.bankcardno,t1.cardphyid,t1.deviceno,t1.mode,t1.status,t1.transdate,t1.transtime,t1.water_in_100ml water_sum_hundred_litre,t1.name username,t2.devicename,t2.areaname,t2.areano  " +
-                "from (select dtl.*,person.name from tb_transdtl dtl left join tb_person person on dtl.userid = person.userid) t1," +
+    override fun queryTransdtlDTOByParam(param: TransdtlSearchBean): PageResult<TCollectdtlDTO>? {
+        val sql = StringBuffer("select t1.cobillno,t1.amount,t1.citizencardno,t1.cardphyid,t1.deviceno,t1.mode,t1.status,t1.transdate,t1.entryno,t1.transtime,t1.accdate,t1.water_in_100ml water_sum_hundred_litre,t1.name username,t2.devicename,t2.areaname,t2.areano  " +
+                "from (select dtl.*,person.name from tb_collectdtl dtl left join tb_person person on dtl.userid = person.userid) t1," +
                 "(select device.deviceno,device.devicename,area.areaname,area.areano from tb_device device,tb_area area where device.areano = area.areano) t2 " +
                 "where t1.deviceno = t2.deviceno")
         val countSql = StringBuffer("select count(cobillno) " +
-                "from (select dtl.*,person.name from tb_transdtl dtl left join tb_person person on dtl.userid = person.userid) t1," +
+                "from (select dtl.*,person.name from tb_collectdtl dtl left join tb_person person on dtl.userid = person.userid) t1," +
                 "(select device.deviceno,device.devicename,area.areaname,area.areano from tb_device device,tb_area area where device.areano = area.areano) t2 " +
                 "where t1.deviceno = t2.deviceno")
         val map: HashMap<String, Int> = HashMap()
         var position = 1
-        if (!StringUtil.isEmpty(param.transtime)) {
+        if (param.notacc) {
+            sql.append(" and status='wip'")
+            countSql.append(" and status='wip'")
+        }
+        if (!StringUtil.isEmpty(param.transdate)) {
             sql.append(" and transdate >=?")
             countSql.append(" and transdate >=?")
 
             sql.append(" and transdate <=?")
             countSql.append(" and transdate <=?")
-            map["mindate"] = position++
-            map["maxdate"] = position++
+            map["mintransdate"] = position++
+            map["maxtransdate"] = position++
+        }
+        if (!StringUtil.isEmpty(param.accdate)) {
+            sql.append(" and accdate >=?")
+            countSql.append(" and accdate >=?")
+
+            sql.append(" and accdate <=?")
+            countSql.append(" and accdate <=?")
+            map["minaccdate"] = position++
+            map["maxaccdate"] = position++
         }
         if (!StringUtil.isEmpty(param.username)) {
             sql.append(" and name like ?")
@@ -117,7 +134,7 @@
             map.put("areano", position++)
         }
         sql.append(" order by cobillno desc limit " + param.pageSize + " offset " + (param.pageNo - 1) * param.pageSize)
-        val query = em.createNativeQuery(sql.toString(), TTransdtlDTO::class.java)
+        val query = em.createNativeQuery(sql.toString(), TCollectdtlDTO::class.java)
         val countQuery = em.createNativeQuery(countSql.toString())
         map["devicename"]?.let {
             query.setParameter(it, "%" + param.devicename + "%")
@@ -135,19 +152,26 @@
             query.setParameter(it, "%" + param.username + "%")
             countQuery.setParameter(it, "%" + param.username + "%")
         }
-        map["mindate"]?.let {
+        map["mintransdate"]?.let {
 
-            val timerange = param.transtime.replace("-", "").split("  ")
+            val timerange = param.transdate.replace("-", "").split("  ")
             query.setParameter(it, timerange[0])
-            query.setParameter(map["maxdate"]!!, timerange[1])
+            query.setParameter(map["maxtransdate"]!!, timerange[1])
             countQuery.setParameter(it, timerange[0])
-            countQuery.setParameter(map["maxdate"]!!, timerange[1])
+            countQuery.setParameter(map["maxtransdate"]!!, timerange[1])
         }
-        val transdtlDTO: List<TTransdtlDTO> = query.resultList as List<TTransdtlDTO>
+        map["minaccdate"]?.let {
+            val timerange = param.accdate.replace("-", "").split("  ")
+            query.setParameter(it, timerange[0])
+            query.setParameter(map["maxaccdate"]!!, timerange[1])
+            countQuery.setParameter(it, timerange[0])
+            countQuery.setParameter(map["maxaccdate"]!!, timerange[1])
+        }
+        val collectdtlDTO: List<TCollectdtlDTO> = query.resultList as List<TCollectdtlDTO>
         val count: Int = countQuery.singleResult.toString().toInt()
-        val result: PageResult<TTransdtlDTO> = PageResult()
+        val result: PageResult<TCollectdtlDTO> = PageResult()
         result.apply {
-            this.data = transdtlDTO
+            this.data = collectdtlDTO
             this.count = count.toLong()
             this.code = 0
             this.msg = "成功"
@@ -155,32 +179,83 @@
         return result
     }
 
-    override fun queryTransdtlCountByParam(param: TransdtlCountSearchBean): PageResult<TTransdtlCount> {
-        val pageable = PageRequest.of(param.pageNo - 1, param.pageSize)
-        val specification = Specification<TTransdtlCount> { root, query, cb ->
-            val predicates = ArrayList<Predicate>()
-            if (param.areano != null) {
-                predicates.add(cb.equal(root.get<Int>("areano").`as`(Int::class.java), param.areano))
-            }
-            if (!StringUtil.isEmpty(param.devicename)) {
-                predicates.add(cb.like(root.get("devicename"), "%" + param.devicename.trim() + "%"))
-            }
-            if (!StringUtil.isEmpty(param.transtime)) {
-                val timerange = param.transtime.replace("-", "").split("  ")
-                predicates.add(cb.greaterThanOrEqualTo(root.get("accdate"), timerange[0]))
-                predicates.add(cb.lessThanOrEqualTo(root.get("accdate"), timerange[1]))
-            }
-            query.where(*predicates.toTypedArray()).restriction
+    override fun queryTransdtlCountByParam(param: TransdtlCountSearchBean): PageResult<TTransdtlCountVO> {
+        val querySql = StringBuffer("select t1.*,t2.devicename,t2.areaname from (select * from tb_transdtl_count) t1 left join " +
+                "(select device.deviceno,device.devicename,area.areaname from tb_device device left join tb_area area on device.areano = area.areano) t2 " +
+                "on t1.deviceno=t2.deviceno where 1=1")
+        val countSql = StringBuffer("select count(id) from (select * from tb_transdtl_count) t1 left join " +
+                "(select device.deviceno,device.devicename,area.areaname from tb_device device left join tb_area area on device.areano = area.areano) t2 " +
+                "on t1.deviceno=t2.deviceno where 1=1")
+        if (!StringUtil.isEmpty(param.accdate)) {
+            querySql.append(" and accdate>:minaccdate")
+            querySql.append(" and accdate<:maxaccdate")
+            countSql.append(" and accdate>:minaccdate")
+            countSql.append(" and accdate<:maxaccdate")
         }
-        val dtlCountPage = transdtlCountDao.findAll(specification, pageable)
-        return PageResult<TTransdtlCount>(dtlCountPage)
+        if (!StringUtil.isEmpty(param.devicename)) {
+            querySql.append(" and devicename like :devicename")
+            countSql.append(" and devicename like :devicename")
+        }
+        param.areano?.let {
+            querySql.append(" and areano=:areano")
+            countSql.append(" and areano=:areano")
+
+        }
+        querySql.append(" order by id desc")
+        val query = em.createNativeQuery(querySql.toString())
+        val countQuery = em.createNativeQuery(countSql.toString())
+        if (!StringUtil.isEmpty(param.accdate)) {
+            val timerange = param.accdate.replace("-", "").split("  ")
+            query.setParameter("minaccdate", timerange[0])
+            query.setParameter("maxaccdate", timerange[1])
+            countQuery.setParameter("minaccdate", timerange[0])
+            countQuery.setParameter("maxaccdate", timerange[1])
+        }
+        if (!StringUtil.isEmpty(param.devicename)) {
+            query.setParameter("devicename", "%"+param.devicename.trim()+"%")
+            countQuery.setParameter("devicename", "%"+param.devicename.trim()+"%")
+        }
+        param.areano?.let {
+            query.setParameter("areano", param.areano)
+            countQuery.setParameter("areano", param.areano)
+        }
+        query.firstResult = (param.pageNo - 1) * param.pageSize
+        query.maxResults = param.pageSize
+        query.unwrap(NativeQueryImpl::class.java).setResultTransformer(Transformers.aliasToBean(TTransdtlCountVO::class.java))
+        val list = query.resultList as List<TTransdtlCountVO>
+        val count = countQuery.singleResult as BigInteger
+        return PageResult(count.longValueExact(),list)
     }
 
     override fun queryTransdtlNotEntry(): List<TCollectdtl>? {
-        return collectdtlDao.findWipCollectdtl(PageRequest.of(0,10))
+        return collectdtlDao.findWipCollectdtl(PageRequest.of(0, 10))
     }
 
     override fun findByCobillnoForUpdate(cobillno: Int?): TCollectdtl {
         return collectdtlDao.findByCobillnoForUpdate(cobillno) ?: throw RuntimeException("采集流水号:" + cobillno + "未找到")
     }
+
+    override fun generateCountdtl(accdate: String?) {
+        val querySql = "select t3.deviceno,t3.areano,coalesce(t4.accdate,:accdate) accdate,t4.mode,coalesce(t4.amount,0) amount,coalesce(t4.water,0) water,coalesce(t4.count,0) " +
+                "count from tb_device t3 LEFT JOIN (select t1.deviceno,t1.accdate,t1.mode,t1.amount,t1.water,t1.count,t2.areano from (select deviceno,accdate,mode,sum(amount) amount,sum(water_in_100ml) water,count(cobillno) count " +
+                "from tb_collectdtl where accdate=:accdate and status = 'success' group by deviceno,mode,accdate) t1 LEFT JOIN " +
+                "(select deviceno,areano from tb_device) t2 on t1.deviceno=t2.deviceno) t4 on t3.deviceno=t4.deviceno"
+        val query = em.createNativeQuery(querySql)
+        query.setParameter("accdate", accdate)
+        query.unwrap(NativeQueryImpl::class.java).setResultTransformer(Transformers.aliasToBean(TTransdtlCountDTO::class.java))
+        val countDTOList = query.resultList as List<TTransdtlCountDTO>
+        val list = ArrayList<TTransdtlCount>()
+        countDTOList.forEach {
+            val transCount = TTransdtlCount()
+            transCount.accdate = it.accdate
+            transCount.amount = it.amount
+            transCount.water = it.water.toInt()
+            transCount.count = it.count.toInt()
+            transCount.mode = it.mode
+            transCount.areano = it.areano
+            transCount.deviceno = it.deviceno
+            list.add(transCount)
+        }
+        transdtlCountDao.saveAll(list)
+    }
 }
\ No newline at end of file
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 28dbe72..3c4413d 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -25,7 +25,4 @@
 ################################################
 # user password
 auth.password.bcrypt.length=10
-payapi.url=https://yy.dlsmk.cn/payapi
-#appid secret
-water.appid=700001
-water.secret=5f788ce433ec44f299351cdf7f137e81
\ No newline at end of file
+payapi.url=https://yy.dlsmk.cn/payapi
\ No newline at end of file
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index ea6e5d8..d3bcb53 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -25,10 +25,12 @@
 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 (6, NULL, 1, NULL, 'layui-icon-set', '/region/index', '区域管理', 2, 1);
 INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (7, NULL, 1, NULL, 'layui-icon-set', '/device/index', '设备管理', 3, 1);
-INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (8, NULL, 1, NULL, 'layui-icon-set', '/transdtl/index', '流水查询', 4, 1);
-INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (9, NULL, 1, NULL, 'layui-icon-set', '/dtlcount/index', '流水统计', 5, 1);
-INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (10, NULL, 1, NULL, 'layui-icon-set', '/areapara/index', '设备参数组管理', 6, 1);
-INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (11, NULL, 1, NULL, 'layui-icon-set', '/areaparabind/index', '水控参数区域绑定', 7, 1);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (8, NULL, 1, NULL, 'layui-icon-set', '/collectdtl/index', '采集流水查询', 4, 1);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (9, NULL, 1, NULL, 'layui-icon-set', '/dtlcount/index', '流水统计', 6, 1);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (10, NULL, 1, NULL, 'layui-icon-set', '/areapara/index', '设备参数组管理', 7, 1);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (11, NULL, 1, NULL, 'layui-icon-set', '/areaparabind/index', '水控参数区域绑定', 8, 1);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (12, NULL, 1, NULL, 'layui-icon-set', '/accdtl/index', '入账流水查询', 5, 1);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (13, NULL, 1, NULL, 'layui-icon-set', '/useracc/index', '用户账户查询', 9, 1);
 
 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');
@@ -41,6 +43,8 @@
 INSERT INTO "tb_role_function"("id", "functionid", "permissions", "roleid") VALUES ('9', 9, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
 INSERT INTO "tb_role_function"("id", "functionid", "permissions", "roleid") VALUES ('10', 10, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
 INSERT INTO "tb_role_function"("id", "functionid", "permissions", "roleid") VALUES ('11', 11, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function"("id", "functionid", "permissions", "roleid") VALUES ('12', 12, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function"("id", "functionid", "permissions", "roleid") VALUES ('13', 13, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
 
 
 
@@ -109,8 +113,8 @@
 
 INSERT INTO "tb_devicefeeconfig"("areano", "feecfgversion", "feeconfig") VALUES (1, NULL, 1);
 INSERT INTO "tb_feeconfig"("id", "amount", "max_water_litre", "cfg_version") VALUES (1, 1, 50, NULL);
-INSERT INTO "tb_person_identity"("third_uid", "createtime", "lockflag", "lossflag", "status", "userid", "cardphyid","coamount","accamount") VALUES ('25002882', NULL, 0, 0, '1', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '6655ec27',0,0);
-INSERT INTO "tb_person_identity"("third_uid", "accamount", "cardphyid", "coamount", "createtime", "lockflag", "lossflag", "status", "userid") VALUES ('25002885', 0, '6655ec27', 0, NULL, 0, 0, '1', 'f3yctKs5+bs1iMU4m8JUvPOus7SbDbrd');
+INSERT INTO "tb_person_identity"("third_uid", "accamount", "cardphyid", "coamount", "createtime", "lockflag", "lossflag", "status", "userid") VALUES ('25002882', 0, '6655ec27', 0, NULL, 0, 0, 'normal', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_person_identity"("third_uid", "accamount", "cardphyid", "coamount", "createtime", "lockflag", "lossflag", "status", "userid") VALUES ('25002885', 0, '6655ec27', 0, NULL, 0, 0, 'normal', 'f3yctKs5+bs1iMU4m8JUvPOus7SbDbrd');
 INSERT INTO "tb_person"("userid", "addr", "country", "email", "idno", "idtype", "lastsaved", "mobile", "name", "nation", "sex", "status", "tel", "zipcode") VALUES ('d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '王富贵', NULL, NULL, '1', NULL, NULL);
 INSERT INTO "tb_person"("userid", "addr", "country", "email", "idno", "idtype", "lastsaved", "mobile", "name", "nation", "sex", "status", "tel", "zipcode") VALUES ('f3yctKs5+bs1iMU4m8JUvPOus7SbDbrd', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '蔡程应', NULL, NULL, '1', NULL, NULL);
 
@@ -118,6 +122,9 @@
 INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_auth_url', 'http://172.28.43.20:8080/water/api/device/confirm?cobillno=');
 INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_sina_shorturl', 'http://api.t.sina.com.cn/short_url/shorten.json?source=2223392143');
 INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_shopaccno', '2000000010');
+INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_appid', '700001');
+INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_secret', '5f788ce433ec44f299351cdf7f137e81');
+
 
 INSERT INTO "tb_area"("areano", "address", "areaname", "available", "arealevel", "parentid", "remarks") VALUES (1, '测试路1号', '测试区域', 1, 1, 0, '测试');
 INSERT INTO "tb_device"("deviceid", "areano", "linecheck", "devistatus", "devicename", "deviceno", "soft_verno") VALUES (1, 1, '20190813143440', 'normal', '测试POS01', '10000001', NULL);
diff --git a/src/main/resources/templates/system/transdtl/index.html b/src/main/resources/templates/system/accdtl/index.html
similarity index 67%
rename from src/main/resources/templates/system/transdtl/index.html
rename to src/main/resources/templates/system/accdtl/index.html
index 475a84d..4675e26 100644
--- a/src/main/resources/templates/system/transdtl/index.html
+++ b/src/main/resources/templates/system/accdtl/index.html
@@ -1,9 +1,9 @@
 <div class="layui-card">
     <div class="layui-card-header">
-        <h2 class="header-title">流水查询</h2>
+        <h2 class="header-title">入账流水查询</h2>
         <span class="layui-breadcrumb pull-right">
           <a href="#">主页</a>
-          <a><cite>流水查询</cite></a>
+          <a><cite>入账流水查询</cite></a>
         </span>
     </div>
     <div class="layui-card-body">
@@ -11,21 +11,21 @@
             <div class="layui-fluid">
                 <div class="layui-row">
                     <div class="layui-col-md4">
-                        <label style="width: 60px" class="layui-form-label">交易日期</label>
+                        <label style="width: 60px" class="layui-form-label">采集日期</label>
                         <input style="width: 200px" type="text" class="layui-input"
-                               id="waterdtl-transtime-search-value" readonly="readonly">
+                               id="wateraccdtl-transdate-search-value" readonly="readonly">
                     </div>
                     <div class="layui-col-md3">
                         <label style="width: 60px" class="layui-form-label">设备名称</label>
-                        <input id="waterdtl-devicename-search-value" class="layui-input search-input" type="text"/>
+                        <input id="wateraccdtl-devicename-search-value" class="layui-input search-input" type="text"/>
                     </div>
                     <div class="layui-col-md3">
                         <label style="width: 60px" class="layui-form-label">设备编号</label>
-                        <input id="waterdtl-deviceno-search-value" class="layui-input search-input" type="text"
+                        <input id="wateraccdtl-deviceno-search-value" class="layui-input search-input" type="text"
                                maxlength="8"/>
                     </div>
                     <div class="layui-col-md2">
-                        <button id="btn-search-waterdtl" class="layui-btn icon-btn" data-type="search"
+                        <button id="btn-search-wateraccdtl" class="layui-btn icon-btn" data-type="search"
                                 style="margin-left: 100px"><i
                                 class="layui-icon">&#xe615;</i>查询
                         </button>
@@ -34,13 +34,18 @@
                 <div style="margin-top: 20px"/>
                 <div class="layui-row">
                     <div class="layui-col-md4">
+                        <label style="width: 60px" class="layui-form-label">入账日期</label>
+                        <input style="width: 200px" type="text" class="layui-input"
+                               id="wateraccdtl-accdate-search-value" readonly="readonly">
+                    </div>
+                    <div class="layui-col-md3">
                         <label style="width: 60px" class="layui-form-label">市民姓名</label>
-                        <input style="width: 200px" id="waterdtl-username-search-value" class="layui-input search-input"
+                        <input id="wateraccdtl-username-search-value" class="layui-input search-input"
                                type="text"/>
                     </div>
-                    <div class="layui-col-md4">
+                    <div class="layui-col-md3">
                         <label style="width: 60px" class="layui-form-label">所在小区</label>
-                        <select name="water-transdtl-parentId" id="waterdtl-select-region" lay-search>
+                        <select name="wateraccdtl-transdtl-parentId" id="wateraccdtl-select-region" lay-search>
 
                         </select>
                     </div>
@@ -59,7 +64,7 @@
         <div class="layui-fluid" style="padding: 0">
             <div class="layui-row">
                 <div>
-                    <table class="layui-table" id="waterdtltable" lay-filter="waterdtltable"></table>
+                    <table class="layui-table" id="wateraccdtltable" lay-filter="wateraccdtltable"></table>
                 </div>
             </div>
         </div>
@@ -74,7 +79,12 @@
         let laydate = layui.laydate;
         //  渲染日期选择框
         laydate.render({
-            elem: '#waterdtl-transtime-search-value',
+            elem: '#wateraccdtl-transdate-search-value',
+            range: true,
+            trigger: 'click'
+        })
+        laydate.render({
+            elem: '#wateraccdtl-accdate-search-value',
             range: true,
             trigger: 'click'
         })
@@ -89,7 +99,7 @@
                     for (var i = 0; i < regions.length; i++) {
                         html += '<option value="' + regions[i].areano + '">' + regions[i].areaName + '</option>'
                     }
-                    $("#waterdtl-select-region").html(html);
+                    $("#wateraccdtl-select-region").html(html);
                 }
                 form.render('select')
             },
@@ -99,35 +109,39 @@
         });
         // 渲染表格
         table.render({
-            elem: '#waterdtltable',
-            url: '[[@{/transdtl/list}]]',
+            elem: '#wateraccdtltable',
+            url: '[[@{/accdtl/list}]]',
             where: {
                 devicename: '',
                 deviceno: '',
                 areano: '',
                 username: '',
-                transtime: ''
+                transdate: '',
+                accdate: '',
             },
             page: true,
             cols: [
                 [
-                    {field: 'cobillno', align: 'center', title: '流水号'},
+                    {field: 'billno', align: 'center', title: '流水号'},
                     {field: 'deviceno', align: 'center', title: '设备号'},
                     {field: 'devicename', align: 'center', title: '设备名称'},
                     {field: 'areaname', align: 'center', title: '区域'},
-                    {field: 'waterSumHundredLitre', align: 'center', title: '用水量'},
+                    {field: 'watersumhundredlitre', align: 'center', title: '用水量'},
                     {field: 'amount', align: 'center', title: '金额'},
                     {field: 'username', align: 'center', title: '姓名'},
-                    {field: 'bankcardno', align: 'center', title: '卡号'},
+                    {field: 'citizencardno', align: 'center', title: '卡号'},
                     {field: 'cardphyid', align: 'center', title: '物理卡号'},
+                    {field: 'accdate', align: 'center', title: '入账日期',
+                    templet:function (item) {
+                        return formatDate(item.accdate)
+                    }},
+                    {field: 'refno', align: 'center', title: '支付中心流水'},
                     {
                         field: 'transdate',
                         align: 'center',
-                        title: '交易时间',
+                        title: '采集时间',
                         templet: function (item) {
-                            var date = item.transdate
-                            date = date.slice(0, 4) + '/' + date.slice(4)
-                            return date.slice(0, 7) + '/' + date.slice(7)
+                            return formatDate(item.transdate)
                         }
                     },
                     {
@@ -167,21 +181,23 @@
         });
 
         // 搜索按钮点击事件
-        $('#btn-search-waterdtl').click(function () {
-            var devicename = $('#waterdtl-devicename-search-value').val().trim();
-            var deviceno = $('#waterdtl-deviceno-search-value').val().trim();
-            var areano = $('#waterdtl-select-region').val();
-            var username = $('#waterdtl-username-search-value').val().trim();
-            var transtime = $('#waterdtl-transtime-search-value').val();
-            table.reload('waterdtltable', {
+        $('#btn-search-wateraccdtl').click(function () {
+            var devicename = $('#wateraccdtl-devicename-search-value').val().trim();
+            var deviceno = $('#wateraccdtl-deviceno-search-value').val().trim();
+            var areano = $('#wateraccdtl-select-region').val();
+            var username = $('#wateraccdtl-username-search-value').val().trim();
+            var transdate = $('#wateraccdtl-transdate-search-value').val();
+            var accdate = $('#wateraccdtl-accdate-search-value').val();
+            table.reload('wateraccdtltable', {
                 where: {
                     devicename: devicename,
                     deviceno: deviceno,
                     areano: areano,
                     username: username,
-                    transtime: transtime
+                    transdate: transdate,
+                    accdate: accdate,
                 },
-                url: "[[@{/transdtl/list}]]",
+                url: "[[@{/accdtl/list}]]",
                 page: {
                     curr: 1
                 },
@@ -191,6 +207,12 @@
             });
         });
     });
+    function formatDate(date){
+        if (date == null) {
+            return ''
+        }
+        return date.substring(0,4)+'-'+date.substring(4,6)+'-'+date.substring(6,8);
+    }
 </script>
 
 
diff --git a/src/main/resources/templates/system/areapara/form.html b/src/main/resources/templates/system/areapara/form.html
index cca0af8..3e18d81 100644
--- a/src/main/resources/templates/system/areapara/form.html
+++ b/src/main/resources/templates/system/areapara/form.html
@@ -1,17 +1,17 @@
-<form id="areapara-form" lay-filter="areapara-form-filter" class="layui-form model-form"
+<form id="waterareapara-form" lay-filter="waterareapara-form-filter" class="layui-form model-form"
       style="padding: 30px 25px 10px 25px;">
     <div class="layui-form-item">
         <div class="layui-inline">
             <label class="layui-form-label">参数组编号</label>
             <div class="layui-input-inline">
-                <input name="form_areapara_groupid" id="form-areapara-groupid" type="text" class="layui-input" style="background-color:#fafafa;"
+                <input name="waterform_areapara_groupid" id="waterform-areapara-groupid" type="text" class="layui-input" style="background-color:#fafafa;"
                        th:value="${areaparaGroup.groupid}" autocomplete="off" readonly="readonly"/>
             </div>
         </div>
         <div class="layui-inline">
             <label class="layui-form-label">参数组名称</label>
             <div class="layui-input-inline">
-                <input name="form_areapara_groupname" id="form-areapara-groupname" type="text" maxlength="20" class="layui-input"
+                <input name="waterform_areapara_groupname" id="waterform-areapara-groupname" type="text" maxlength="20" class="layui-input"
                        th:value="${areaparaGroup.groupname}" autocomplete="off" lay-verify="required" required/>
             </div>
         </div>
diff --git a/src/main/resources/templates/system/areapara/index.html b/src/main/resources/templates/system/areapara/index.html
index b99f469..1807e9b 100644
--- a/src/main/resources/templates/system/areapara/index.html
+++ b/src/main/resources/templates/system/areapara/index.html
@@ -9,18 +9,18 @@
     <div class="layui-card-body">
         <div class="layui-form toolbar">
             搜索：
-            <input id="search-areaparagroup-groupname" class="layui-input search-input" maxlength="20" type="text" placeholder="输入参数组名称"/>&emsp;
-            <button id="btn-search-areaparagroup" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            <input id="watersearch-areaparagroup-groupname" class="layui-input search-input" maxlength="20" type="text" placeholder="输入参数组名称"/>&emsp;
+            <button id="waterbtn-search-areaparagroup" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
             </button>
-            <button id="search-areaparagroup-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon">&#xe654;</i>新 增</button>
+            <button id="watersearch-areaparagroup-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon">&#xe654;</i>新 增</button>
         </div>
-        <table class="layui-table" id="areaparagroupTable" lay-filter="areaparagroupTable-filter"></table>
+        <table class="layui-table" id="waterareaparagroupTable" lay-filter="waterareaparagroupTable-filter"></table>
     </div>
 </div>
 
 
 <!-- 表格操作列 -->
-<script type="text/html" id="areaparagroup-table-bar">
+<script type="text/html" id="waterareaparagroup-table-bar">
     <a class="layui-btn layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"/>修改</a>
     {{# if(!d.globalflag){ }}
     <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"/>删除</a>
@@ -34,7 +34,7 @@
         var admin = layui.admin;
         // 渲染表格
         table.render({
-            elem: '#areaparagroupTable',
+            elem: '#waterareaparagroupTable',
             url: '[[@{/areapara/grouplist}]]',
             page: true,
             cols: [
@@ -57,25 +57,25 @@
                             return '';
                         }
                     },
-                    {align: 'center', title: '操作', width: 250, toolbar: '#areaparagroup-table-bar',  fixed: 'right'}
+                    {align: 'center', title: '操作', width: 250, toolbar: '#waterareaparagroup-table-bar',  fixed: 'right'}
                 ]
             ]
         });
 
         // 搜索按钮点击事件
-        $('#btn-search-areaparagroup').click(function () {
-            var paraname = $("#search-areaparagroup-groupname").val().trim();
-            table.reload('areaparagroupTable', {where: {groupname: paraname}, page: {curr: 1},text:{none:"没有符合查询条件的参数组"}});
+        $('#waterbtn-search-areaparagroup').click(function () {
+            var paraname = $("#watersearch-areaparagroup-groupname").val().trim();
+            table.reload('waterareaparagroupTable', {where: {groupname: paraname}, page: {curr: 1},text:{none:"没有符合查询条件的参数组"}});
         });
 
-        $('#search-areaparagroup-add').click(function () {
+        $('#watersearch-areaparagroup-add').click(function () {
             admin.popupCenter({
                 title: "新增设备参数组",
                 path: '[[@{/areapara/loadadd}]]',
                 area: '1200px',
                 offset: '10px',
                 finish: function () {
-                    table.reload('areaparagroupTable',{
+                    table.reload('waterareaparagroupTable',{
                         where:{groupname:""},
                         url:'[[@{/areapara/grouplist}]]',
                         page:{
@@ -87,7 +87,7 @@
         });
 
         //监听单元格
-        table.on('tool(areaparagroupTable-filter)', function (obj) {
+        table.on('tool(waterareaparagroupTable-filter)', function (obj) {
             var data = obj.data;
 
             if('del' == obj.event){
@@ -112,7 +112,7 @@
                         } else {
                             layer.msg(data.msg, {icon: 2});
                         }
-                        table.reload('areaparagroupTable');
+                        table.reload('waterareaparagroupTable');
                     }, function (err) {
                         admin.errorBack(err)
                     });
@@ -124,7 +124,7 @@
                     area: '1200px',
                     offset: '10px',
                     finish: function () {
-                        table.reload('areaparagroupTable');
+                        table.reload('waterareaparagroupTable');
                     }
                 });
             }
diff --git a/src/main/resources/templates/system/areaparabind/form.html b/src/main/resources/templates/system/areaparabind/form.html
index a34a9d5..24f23df 100644
--- a/src/main/resources/templates/system/areaparabind/form.html
+++ b/src/main/resources/templates/system/areaparabind/form.html
@@ -1,10 +1,10 @@
-<div id="areaparabind-form" lay-filter="areaparabind-form-filter" class="layui-form model-form"
+<div id="waterareaparabind-form" lay-filter="waterareaparabind-form-filter" class="layui-form model-form"
      style="padding: 30px 25px 10px 25px;">
     <div class="layui-form-item">
         <div class="layui-input-inline" style="width: 300px;">
             <label class="layui-form-label">参数组</label>
             <div class="layui-input-block">
-                <select lay-verify="required" class="layui-select" id="areaparabind-form-select-groupid">
+                <select lay-verify="required" class="layui-select" id="waterareaparabind-form-select-groupid">
                     <option th:each="gp:${grouplist}" th:value="${gp.groupid}"
                             th:text="${gp.groupname}"></option>
                 </select>&emsp;
@@ -18,13 +18,13 @@
             <div class="layui-card-body">
                 <div class="layui-form toolbar">
                     区域：
-                    <input id="search-areaparabind-form-searchkey" type="text" class="layui-input search-input"
+                    <input id="watersearch-areaparabind-form-searchkey" type="text" class="layui-input search-input"
                            maxlength="20" style="width: 200px;" placeholder="输入区域名称"/>&emsp;
-                    <button id="btn-search-areaparabind-form" class="layui-btn icon-btn"><i
+                    <button id="waterbtn-search-areaparabind-form" class="layui-btn icon-btn"><i
                             class="layui-icon">&#xe615;</i>搜索
                     </button>
 
-                    <table class="layui-table" id="areaparabindformTable" lay-filter="areaparabindformTable-filter"></table>
+                    <table class="layui-table" id="waterareaparabindformTable" lay-filter="waterareaparabindformTable-filter"></table>
                 </div>
             </div>
         </div>
@@ -55,7 +55,7 @@
 
         // 渲染表格
         table.render({
-            elem: '#areaparabindformTable',
+            elem: '#waterareaparabindformTable',
             url: '[[@{/areapara/arealist}]]',
             where:{
                 searchkey:''
@@ -65,7 +65,7 @@
             page: false,
             cols: [
                 [
-                    {type: 'checkbox', style: "#areaparabind-form-css", fixed: 'left'},
+                    {type: 'checkbox', style: "#waterareaparabind-form-css", fixed: 'left'},
                     {field: 'areano', title: '区域编号', align: 'center'},
                     {field: 'areaname', title: '区域名称', align: 'center'},
                     {field: 'address', title: '详细地址', align: 'center'},
@@ -78,15 +78,15 @@
         });
 
         // 搜索按钮点击事件
-        $('#btn-search-areaparabind-form').click(function () {
-            var searchkey = $("#search-areaparabind-form-searchkey").val();
-            table.reload('areaparabindformTable', {where: {searchkey: searchkey}});
+        $('#waterbtn-search-areaparabind-form').click(function () {
+            var searchkey = $("#watersearch-areaparabind-form-searchkey").val();
+            table.reload('waterareaparabindformTable', {where: {searchkey: searchkey}});
         });
 
 
         form.on('submit(form-submit)', function (el) {
-            var groupid = $("#areaparabind-form-select-groupid").val();
-            var checkStatus = table.checkStatus('areaparabindformTable');
+            var groupid = $("#waterareaparabind-form-select-groupid").val();
+            var checkStatus = table.checkStatus('waterareaparabindformTable');
             var data = checkStatus.data;
             var areanos = [];
             if ("" == groupid) {
@@ -117,7 +117,7 @@
                     layer.closeAll('loading');
                     if (result.code == 200) {
                         layer.msg(result.msg, {icon: 1});
-                        table.reload('areaparabindformTable');
+                        table.reload('waterareaparabindformTable');
                         admin.finishPopupCenter();
                     } else if (result.code == 401) {
                         layer.msg(result.msg, {icon: 2, time: 1500}, function () {
diff --git a/src/main/resources/templates/system/areaparabind/index.html b/src/main/resources/templates/system/areaparabind/index.html
index 1d600b0..d923a76 100644
--- a/src/main/resources/templates/system/areaparabind/index.html
+++ b/src/main/resources/templates/system/areaparabind/index.html
@@ -9,18 +9,18 @@
     <div class="layui-card-body">
         <div class="layui-form toolbar">
             搜索：
-            <input id="search-areaparabind-searchkey" class="layui-input search-input" maxlength="20" type="text" style="width: 300px;" placeholder="输入参数组名称或区域名称"/>&emsp;
-            <button id="btn-search-areaparabind" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            <input id="watersearch-areaparabind-searchkey" class="layui-input search-input" maxlength="20" type="text" style="width: 300px;" placeholder="输入参数组名称或区域名称"/>&emsp;
+            <button id="waterbtn-search-areaparabind" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
             </button>
-            <button id="search-areaparabind-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon">&#xe654;</i>新 增</button>
+            <button id="watersearch-areaparabind-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon">&#xe654;</i>新 增</button>
         </div>
-        <table class="layui-table" id="areaparabindTable" lay-filter="areaparabindTable-filter"></table>
+        <table class="layui-table" id="waterareaparabindTable" lay-filter="waterareaparabindTable-filter"></table>
     </div>
 </div>
 
 
 <!-- 表格操作列 -->
-<script type="text/html" id="areaparabind-table-bar">
+<script type="text/html" id="waterareaparabind-table-bar">
     <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>
 </script>
 
@@ -31,7 +31,7 @@
         var admin = layui.admin;
         // 渲染表格
         table.render({
-            elem: '#areaparabindTable',
+            elem: '#waterareaparabindTable',
             url: '[[@{/areapara/areaparabindlist}]]',
             page: true,
             cols: [
@@ -45,25 +45,25 @@
                             return admin.formatDate(d.lastsaved);
                         }
                     },
-                    {align: 'center', title: '操作', width: 100, toolbar: '#areaparabind-table-bar', fixed: 'right'}
+                    {align: 'center', title: '操作', width: 100, toolbar: '#waterareaparabind-table-bar', fixed: 'right'}
                 ]
             ]
         });
 
         // 搜索按钮点击事件
-        $('#btn-search-areaparabind').click(function () {
-            var searchkey = $("#search-areaparabind-searchkey").val();
-            table.reload('areaparabindTable', {where: {searchkey: searchkey}, page: {curr: 1}});
+        $('#waterbtn-search-areaparabind').click(function () {
+            var searchkey = $("#watersearch-areaparabind-searchkey").val();
+            table.reload('waterareaparabindTable', {where: {searchkey: searchkey}, page: {curr: 1}});
         });
 
-        $('#search-areaparabind-add').click(function () {
+        $('#watersearch-areaparabind-add').click(function () {
             admin.popupCenter({
                 title: "新增区域参数组绑定关系",
                 path: '[[@{/areapara/loadbindadd}]]',
                 area: '900px',
                 offset: '0px',
                 finish: function () {
-                    table.reload('areaparabindTable',{
+                    table.reload('waterareaparabindTable',{
                         where:{searchkey:""},
                         url:'[[@{/areapara/areaparabindlist}]]',
                         page:{
@@ -75,7 +75,7 @@
         });
 
         //监听单元格
-        table.on('tool(areaparabindTable-filter)', function (obj) {
+        table.on('tool(waterareaparabindTable-filter)', function (obj) {
             var data = obj.data;
 
             if('del' == obj.event){
@@ -100,7 +100,7 @@
                         } else {
                             layer.msg(data.msg, {icon: 2});
                         }
-                        table.reload('areaparabindTable');
+                        table.reload('waterareaparabindTable');
                     }, function (err) {
                         admin.errorBack(err)
                     });
diff --git a/src/main/resources/templates/system/transdtl/index.html b/src/main/resources/templates/system/collectdtl/index.html
similarity index 60%
copy from src/main/resources/templates/system/transdtl/index.html
copy to src/main/resources/templates/system/collectdtl/index.html
index 475a84d..6377f91 100644
--- a/src/main/resources/templates/system/transdtl/index.html
+++ b/src/main/resources/templates/system/collectdtl/index.html
@@ -1,9 +1,9 @@
 <div class="layui-card">
     <div class="layui-card-header">
-        <h2 class="header-title">流水查询</h2>
+        <h2 class="header-title">采集流水查询</h2>
         <span class="layui-breadcrumb pull-right">
           <a href="#">主页</a>
-          <a><cite>流水查询</cite></a>
+          <a><cite>采集流水查询</cite></a>
         </span>
     </div>
     <div class="layui-card-body">
@@ -11,21 +11,21 @@
             <div class="layui-fluid">
                 <div class="layui-row">
                     <div class="layui-col-md4">
-                        <label style="width: 60px" class="layui-form-label">交易日期</label>
+                        <label style="width: 60px" class="layui-form-label">采集日期</label>
                         <input style="width: 200px" type="text" class="layui-input"
-                               id="waterdtl-transtime-search-value" readonly="readonly">
+                               id="watercollectdtl-transdate-search-value" readonly="readonly">
                     </div>
                     <div class="layui-col-md3">
                         <label style="width: 60px" class="layui-form-label">设备名称</label>
-                        <input id="waterdtl-devicename-search-value" class="layui-input search-input" type="text"/>
+                        <input id="watercollectdtl-devicename-search-value" class="layui-input search-input" type="text"/>
                     </div>
                     <div class="layui-col-md3">
                         <label style="width: 60px" class="layui-form-label">设备编号</label>
-                        <input id="waterdtl-deviceno-search-value" class="layui-input search-input" type="text"
+                        <input id="watercollectdtl-deviceno-search-value" class="layui-input search-input" type="text"
                                maxlength="8"/>
                     </div>
                     <div class="layui-col-md2">
-                        <button id="btn-search-waterdtl" class="layui-btn icon-btn" data-type="search"
+                        <button id="btn-search-watercollectdtl" class="layui-btn icon-btn" data-type="search"
                                 style="margin-left: 100px"><i
                                 class="layui-icon">&#xe615;</i>查询
                         </button>
@@ -34,16 +34,26 @@
                 <div style="margin-top: 20px"/>
                 <div class="layui-row">
                     <div class="layui-col-md4">
+                        <label style="width: 60px" class="layui-form-label">入账日期</label>
+                        <input style="width: 200px" type="text" class="layui-input"
+                               id="watercollectdtl-accdate-search-value" readonly="readonly">
+                    </div>
+                    <div class="layui-col-md3">
                         <label style="width: 60px" class="layui-form-label">市民姓名</label>
-                        <input style="width: 200px" id="waterdtl-username-search-value" class="layui-input search-input"
+                        <input id="watercollectdtl-username-search-value" class="layui-input search-input"
                                type="text"/>
                     </div>
-                    <div class="layui-col-md4">
+                    <div class="layui-col-md3">
                         <label style="width: 60px" class="layui-form-label">所在小区</label>
-                        <select name="water-transdtl-parentId" id="waterdtl-select-region" lay-search>
+                        <select name="watercollectdtl-transdtl-parentId" id="watercollectdtl-select-region" lay-search>
 
                         </select>
                     </div>
+                    <div class="layui-col-md2">
+                        <label style="margin-right: 97px"></label>
+                        <input type="checkbox" id="watercollectdtl-notacc-switch"
+                               lay-skin="switch" lay-text="未入账|未入账" lay-filter="watercollectdtl-notacc-switch">
+                    </div>
                 </div>
             </div>
         </div>
@@ -59,7 +69,7 @@
         <div class="layui-fluid" style="padding: 0">
             <div class="layui-row">
                 <div>
-                    <table class="layui-table" id="waterdtltable" lay-filter="waterdtltable"></table>
+                    <table class="layui-table" id="watercollectdtltable" lay-filter="watercollectdtltable"></table>
                 </div>
             </div>
         </div>
@@ -73,8 +83,14 @@
         let admin = layui.admin;
         let laydate = layui.laydate;
         //  渲染日期选择框
+        form.render('checkbox')
         laydate.render({
-            elem: '#waterdtl-transtime-search-value',
+            elem: '#watercollectdtl-transdate-search-value',
+            range: true,
+            trigger: 'click'
+        })
+        laydate.render({
+            elem: '#watercollectdtl-accdate-search-value',
             range: true,
             trigger: 'click'
         })
@@ -89,7 +105,7 @@
                     for (var i = 0; i < regions.length; i++) {
                         html += '<option value="' + regions[i].areano + '">' + regions[i].areaName + '</option>'
                     }
-                    $("#waterdtl-select-region").html(html);
+                    $("#watercollectdtl-select-region").html(html);
                 }
                 form.render('select')
             },
@@ -99,14 +115,16 @@
         });
         // 渲染表格
         table.render({
-            elem: '#waterdtltable',
-            url: '[[@{/transdtl/list}]]',
+            elem: '#watercollectdtltable',
+            url: '[[@{/collectdtl/list}]]',
             where: {
                 devicename: '',
                 deviceno: '',
                 areano: '',
                 username: '',
-                transtime: ''
+                transdate: '',
+                accdate: '',
+                notacc: false
             },
             page: true,
             cols: [
@@ -118,16 +136,20 @@
                     {field: 'waterSumHundredLitre', align: 'center', title: '用水量'},
                     {field: 'amount', align: 'center', title: '金额'},
                     {field: 'username', align: 'center', title: '姓名'},
-                    {field: 'bankcardno', align: 'center', title: '卡号'},
+                    {field: 'citizencardno', align: 'center', title: '卡号'},
                     {field: 'cardphyid', align: 'center', title: '物理卡号'},
+                    {field: 'accdate', align: 'center', title: '入账日期',
+                    templet:function (item) {
+                        return formatDate(item.accdate)
+                    }
+                    },
+                    {field: 'entryno', align: 'center', title: '入账流水号'},
                     {
                         field: 'transdate',
                         align: 'center',
-                        title: '交易时间',
+                        title: '采集时间',
                         templet: function (item) {
-                            var date = item.transdate
-                            date = date.slice(0, 4) + '/' + date.slice(4)
-                            return date.slice(0, 7) + '/' + date.slice(7)
+                            return formatDate(item.transdate)
                         }
                     },
                     {
@@ -166,22 +188,39 @@
             ]
         });
 
+        //  未入账开关选择
+        var notacc;
+        form.on('switch(watercollectdtl-notacc-switch)', function (data) {
+            notacc = data.elem.checked;
+            $('#watercollectdtl-devicename-search-value').val('');
+            $('#watercollectdtl-deviceno-search-value').val('');
+            $("#watercollectdtl-select-region").get(0).selectedIndex = 0;
+            $('#watercollectdtl-username-search-value').val('');
+            $('#watercollectdtl-transdate-search-value').val('');
+            $('#watercollectdtl-accdate-search-value').val('');
+            //  重新渲染下拉框
+            form.render('select')
+            $('#btn-search-watercollectdtl').click()
+        });
         // 搜索按钮点击事件
-        $('#btn-search-waterdtl').click(function () {
-            var devicename = $('#waterdtl-devicename-search-value').val().trim();
-            var deviceno = $('#waterdtl-deviceno-search-value').val().trim();
-            var areano = $('#waterdtl-select-region').val();
-            var username = $('#waterdtl-username-search-value').val().trim();
-            var transtime = $('#waterdtl-transtime-search-value').val();
-            table.reload('waterdtltable', {
+        $('#btn-search-watercollectdtl').click(function () {
+            var devicename = $('#watercollectdtl-devicename-search-value').val().trim();
+            var deviceno = $('#watercollectdtl-deviceno-search-value').val().trim();
+            var areano = $('#watercollectdtl-select-region').val();
+            var username = $('#watercollectdtl-username-search-value').val().trim();
+            var transdate = $('#watercollectdtl-transdate-search-value').val();
+            var accdate = $('#watercollectdtl-accdate-search-value').val();
+            table.reload('watercollectdtltable', {
                 where: {
                     devicename: devicename,
                     deviceno: deviceno,
                     areano: areano,
                     username: username,
-                    transtime: transtime
+                    transdate: transdate,
+                    accdate: accdate,
+                    notacc: notacc
                 },
-                url: "[[@{/transdtl/list}]]",
+                url: "[[@{/collectdtl/list}]]",
                 page: {
                     curr: 1
                 },
@@ -191,6 +230,12 @@
             });
         });
     });
+    function formatDate(date){
+        if (date == null) {
+            return ''
+        }
+        return date.substring(0,4)+'-'+date.substring(4,6)+'-'+date.substring(6,8);
+    }
 </script>
 
 
diff --git a/src/main/resources/templates/system/device/index.html b/src/main/resources/templates/system/device/index.html
index 6a90044..28a82fb 100644
--- a/src/main/resources/templates/system/device/index.html
+++ b/src/main/resources/templates/system/device/index.html
@@ -12,20 +12,20 @@
                 <div class="layui-row">
                     <div class="layui-col-md3">
                         <label style="width: 60px" class="layui-form-label">设备名称</label>
-                        <input id="devicename-search-value" class="layui-input search-input" type="text"/>
+                        <input id="waterdevice-devicename-search-value" class="layui-input search-input" type="text"/>
                     </div>
                     <div class="layui-col-md3">
                         <label style="width: 60px" class="layui-form-label">设备编号</label>
-                        <input id="deviceno-search-value" class="layui-input search-input" type="text" maxlength="8"/>
+                        <input id="waterdevice-deviceno-search-value" class="layui-input search-input" type="text" maxlength="8"/>
                     </div>
                     <div class="layui-col-md4">
                         <label style="width: 60px" class="layui-form-label">所在小区</label>
-                        <select name="water-device-parentId" id="select-region" lay-search>
+                        <select name="waterdevice-parentId" id="waterdevice-select-region" lay-search>
 
                         </select>
                     </div>
                     <div class="layui-col-md2">
-                        <button id="btn-search-device" class="layui-btn icon-btn" data-type="search"
+                        <button id="waterdevice-btn-search" class="layui-btn icon-btn" data-type="search"
                                 style="margin-left: 100px"><i
                                 class="layui-icon">&#xe615;</i>查询
                         </button>
@@ -34,7 +34,7 @@
                 <div style="margin-top: 20px"/>
                 <div class="layui-row">
                     <label style="width: 60px" class="layui-form-label">设备状态</label>
-                    <select name="water-device-status" id="select-status">
+                    <select name="waterdevice-status" id="waterdevice-select-status">
 
                     </select>
                 </div>
@@ -45,7 +45,7 @@
         <!--</button>-->
         <!--<button id="btn-export-excel" class="layui-btn icon-btn" data-type="export"><i class="layui-icon">&#xe62d;</i>导出excel-->
         <!--</button>-->
-        <button id="btn-add-device" class="layui-btn icon-btn" data-type="add"><i class="layui-icon">&#xe654;</i>新增
+        <button id="waterdevice-btn-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon">&#xe654;</i>新增
         </button>
         <!--<button id="btn-add-device" class="layui-btn icon-btn" data-type="add"><i class="layui-icon ">&#xe601;</i>模板下载-->
         <!--</button>-->
@@ -54,7 +54,7 @@
         <div class="layui-fluid" style="padding: 0">
             <div class="layui-row">
                 <div>
-                    <table class="layui-table" id="devicetable" lay-filter="devicetable"></table>
+                    <table class="layui-table" id="waterdevicetable" lay-filter="waterdevicetable"></table>
                 </div>
             </div>
         </div>
@@ -77,7 +77,7 @@
                     for (var i = 0; i < regions.length; i++) {
                         html += '<option value="' + regions[i].areano + '">' + regions[i].areaName + '</option>'
                     }
-                    $("#select-region").html(html);
+                    $("#waterdevice-select-region").html(html);
                     form.render('select')
                 }
             },
@@ -96,7 +96,7 @@
                     for (var i = 0; i < status.length; i++) {
                         html += '<option value="' + status[i].dictValue + '">' + status[i].dictKey + '</option>'
                     }
-                    $("#select-status").html(html);
+                    $("#waterdevice-select-status").html(html);
                     form.render('select')
                 }
             },
@@ -106,7 +106,7 @@
         })
         // 渲染表格
         table.render({
-            elem: '#devicetable',
+            elem: '#waterdevicetable',
             url: '[[@{/device/list}]]',
             page: true,
             cols: [
@@ -157,20 +157,20 @@
 
         // 搜索事件
         function search() {
-            var devicename = $('#devicename-search-value').val().trim();
-            var deviceno = $('#deviceno-search-value').val().trim();
-            var areano = $('#select-region').val();
+            var devicename = $('#waterdevice-devicename-search-value').val().trim();
+            var deviceno = $('#waterdevice-deviceno-search-value').val().trim();
+            var areano = $('#waterdevice-select-region').val();
             var status;
-            if ($('#select-status').val() === '正常') {
+            if ($('#waterdevice-select-status').val() === '正常') {
                 status = 'normal'
-            } else if ($('#select-status').val() === '注销') {
+            } else if ($('#waterdevice-select-status').val() === '注销') {
                 status = 'closed'
-            } else if ($('#select-status').val() === '签出') {
+            } else if ($('#waterdevice-select-status').val() === '签出') {
                 status = 'logout'
             } else {
-                status = $('#select-status').val()
+                status = $('#waterdevice-select-status').val()
             }
-            table.reload('devicetable', {
+            table.reload('waterdevicetable', {
                 where: {
                     devicename: devicename,
                     deviceno: deviceno,
@@ -187,9 +187,9 @@
             });
         }
         //  给搜索按钮绑定搜索事件
-        $("#btn-search-device").on('click', search)
+        $("#waterdevice-btn-search").on('click', search)
 
-        $('#btn-add-device').click(function () {
+        $('#waterdevice-btn-add').click(function () {
             showModel();
         });
         let showModel = function (data) {
@@ -204,14 +204,14 @@
                 finish: function () {
                     //  新增时删除搜索条件
                     if (!data) {
-                        $('#devicename-search-value').val('');
-                        $('#deviceno-search-value').val('');
-                        $("#select-status").get(0).selectedIndex=0;
-                        $("#select-region").get(0).selectedIndex=0;
+                        $('#waterdevice-devicename-search-value').val('');
+                        $('#waterdevice-deviceno-search-value').val('');
+                        $("#waterdevice-select-status").get(0).selectedIndex=0;
+                        $("#waterdevice-select-region").get(0).selectedIndex=0;
                         //  重新渲染下拉框
                         form.render('select')
                     }
-                    $("#btn-search-device").click();
+                    $("#waterdevice-btn-search").click();
                 }
             });
         };
@@ -225,7 +225,7 @@
             });
         };
         // 工具条点击事件
-        table.on('tool(devicetable)', function (obj) {
+        table.on('tool(waterdevicetable)', function (obj) {
             let data = obj.data;
             let layEvent = obj.event;
             if (layEvent === 'edit') {
@@ -257,7 +257,7 @@
                     } else {
                         layer.msg(data.retmsg, {icon: 2});
                     }
-                    $("#btn-search-device").click();
+                    $("#waterdevice-btn-search").click();
                 }, function (ret) {
                     console.log(ret);
                     layer.closeAll('loading');
diff --git a/src/main/resources/templates/system/dtlcount/index.html b/src/main/resources/templates/system/dtlcount/index.html
index 8b1fe25..89a7fbe 100644
--- a/src/main/resources/templates/system/dtlcount/index.html
+++ b/src/main/resources/templates/system/dtlcount/index.html
@@ -11,22 +11,22 @@
             <div class="layui-fluid">
                 <div class="layui-row">
                     <div class="layui-col-md4">
-                        <label style="width: 60px" class="layui-form-label">交易日期</label>
+                        <label style="width: 60px" class="layui-form-label">入账日期</label>
                         <input style="width: 200px" type="text" class="layui-input"
-                               id="dtlcount-transtime-search-value" readonly="readonly">
+                               id="waterdtlcount-accdate-search-value" readonly="readonly">
                     </div>
                     <div class="layui-col-md3">
                         <label style="width: 60px" class="layui-form-label">设备名称</label>
-                        <input id="dtlcount-devicename-search-value" class="layui-input search-input" type="text"/>
+                        <input id="waterdtlcount-devicename-search-value" class="layui-input search-input" type="text"/>
                     </div>
                     <div class="layui-col-md3">
                         <label style="width: 60px" class="layui-form-label">所在小区</label>
-                        <select name="water-dtlcount-parentId" id="dtlcount-select-region" lay-search>
+                        <select name="waterdtlcount-dtlcount-parentId" id="waterdtlcount-select-region" lay-search>
 
                         </select>
                     </div>
                     <div class="layui-col-md2">
-                        <button id="btn-search-dtlcount" class="layui-btn icon-btn" data-type="search"
+                        <button id="btn-search-waterdtlcount" class="layui-btn icon-btn" data-type="search"
                                 style="margin-left: 100px"><i
                                 class="layui-icon">&#xe615;</i>查询
                         </button>
@@ -46,14 +46,13 @@
         <div class="layui-fluid" style="padding: 0">
             <div class="layui-row">
                 <div>
-                    <table class="layui-table" id="dtlcounttable" lay-filter="dtlcounttable"></table>
+                    <table class="layui-table" id="waterdtlcounttable" lay-filter="waterdtlcounttable"></table>
                 </div>
             </div>
         </div>
     </div>
 </div>
 <script>
-
     layui.use(['form', 'table', 'layer', 'admin', 'element', 'laydate'], function () {
         let form = layui.form;
         let table = layui.table;
@@ -61,7 +60,7 @@
         let laydate = layui.laydate;
         //  渲染日期选择框
         laydate.render({
-            elem: '#dtlcount-transtime-search-value',
+            elem: '#waterdtlcount-accdate-search-value',
             range: true,
             trigger:'click'
         })
@@ -76,7 +75,7 @@
                     for (var i = 0; i < regions.length; i++) {
                         html += '<option value="' + regions[i].areano + '">' + regions[i].areaName + '</option>'
                     }
-                    $("#dtlcount-select-region").html(html);
+                    $("#waterdtlcount-select-region").html(html);
                 }
                 form.render('select')
             },
@@ -86,12 +85,12 @@
         });
         // 渲染表格
         table.render({
-            elem: '#dtlcounttable',
+            elem: '#waterdtlcounttable',
             url: '[[@{/dtlcount/list}]]',
             where: {
                 devicename: '',
                 areano: '',
-                transtime: ''
+                accdate: ''
             },
             page: true,
             cols: [
@@ -102,34 +101,44 @@
                     {field: 'areano', align: 'center', title: '区域编号', width: 110},
                     {field: 'areaname', align: 'center', title: '区域'},
                     {field: 'count', align: 'center', title: '交易笔数'},
-                    {field: 'mode', align: 'center', title: '记录模式'},
-                    {field: 'waterSumHundredLitre', align: 'center', title: '用水量', width: 85},
+                    {field: 'mode', align: 'center', title: '记录模式',
+                    templet:function (item) {
+                        let mode = item.mode
+                        if (mode == 'qrcode') {
+                            return '扫码';
+                        }else if (mode == 'card') {
+                            return '刷卡';
+                        } else if (null == mode) {
+                            return '无';
+                        } else {
+                            return mode;
+                        }
+                    }},
+                    {field: 'water', align: 'center', title: '用水量', width: 85},
                     {field: 'amount', align: 'center', title: '金额', width: 75},
                     {
                         field: 'accdate',
                         align: 'center',
-                        title: '确认日期',
+                        title: '入账日期',
                         width: 105,
-                        // templet: function (item) {
-                        //     var date = item.transdate
-                        //     date = date.slice(0, 4) + '/' + date.slice(4)
-                        //     return date.slice(0, 7) + '/' + date.slice(7)
-                        // }
+                        templet: function (item) {
+                            return formatDate(item.accdate)
+                        }
                     }
                 ]
             ]
         });
 
         // 搜索按钮点击事件
-        $('#btn-search-dtlcount').click(function () {
-            var devicename = $('#dtlcount-devicename-search-value').val();
-            var areano = $('#dtlcount-select-region').val();
-            var transtime = $('#dtlcount-transtime-search-value').val();
-            table.reload('dtlcounttable', {
+        $('#btn-search-waterdtlcount').click(function () {
+            var devicename = $('#waterdtlcount-devicename-search-value').val();
+            var areano = $('#waterdtlcount-select-region').val();
+            var accdate = $('#waterdtlcount-accdate-search-value').val();
+            table.reload('waterdtlcounttable', {
                 where: {
                     devicename: devicename,
                     areano: areano,
-                    transtime: transtime
+                    accdate: accdate
                 },
                 url: "[[@{/dtlcount/list}]]",
                 page:{
@@ -141,6 +150,12 @@
             });
         });
     });
+    function formatDate(date){
+        if (date == null) {
+            return ''
+        }
+        return date.substring(0,4)+'-'+date.substring(4,6)+'-'+date.substring(6,8)
+    }
 </script>
 
 
diff --git a/src/main/resources/templates/system/region/form.html b/src/main/resources/templates/system/region/form.html
index f4fc7c8..8d72dc0 100644
--- a/src/main/resources/templates/system/region/form.html
+++ b/src/main/resources/templates/system/region/form.html
@@ -45,6 +45,7 @@
         var region_form_func = admin.getTempData('t_func');
         //  清除admin域中的数据
         admin.putTempData('t_func', '');
+        console.log($("#areano").val())
         if (region_form_func) {
             $('input[name="areano"]').attr('readonly', 'readonly');
             region_form_func.parentName = region_form_func.parentName == null ? "无" : region_form_func.parentName
diff --git a/src/main/resources/templates/system/region/index.html b/src/main/resources/templates/system/region/index.html
index 871456f..61b8a9e 100644
--- a/src/main/resources/templates/system/region/index.html
+++ b/src/main/resources/templates/system/region/index.html
@@ -9,11 +9,11 @@
     <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-region" class="layui-btn icon-btn" data-type="search"><i
+            <input id="waterarea-search-value" class="layui-input search-input" type="text" placeholder="输入区域名称"/>&emsp;
+            <button id="waterarea-btn-search" class="layui-btn icon-btn" data-type="search"><i
                     class="layui-icon">&#xe615;</i>查询
             </button>
-            <button id="btn-add-region" class="layui-btn icon-btn" data-type="add" style="float: right"><i
+            <button id="waterarea-btn-add" class="layui-btn icon-btn" data-type="add" style="float: right"><i
                     class="layui-icon">&#xe654;</i>新增区域
             </button>
         </div>
@@ -25,10 +25,10 @@
         <div class="layui-fluid" style="padding-top: 0">
             <div class="layui-row layui-col-space20">
                 <div class="layui-col-md2" style="border: 1px solid #e6e6e6; margin-top: 25px" id="water-area-tree-css">
-                    <div id="regiontree"></div>
+                    <div id="waterarea-tree"></div>
                 </div>
                 <div class="layui-col-md10">
-                    <table class="layui-table" id="regiontable" lay-filter="regiontable"></table>
+                    <table class="layui-table" id="waterareatable" lay-filter="waterareatable"></table>
                 </div>
             </div>
         </div>
@@ -54,7 +54,7 @@
 
         // 渲染表格
         table.render({
-            elem: '#regiontable',
+            elem: '#waterareatable',
             url: '[[@{/region/search}]]',
             page: true,
             toolbar: true,
@@ -89,9 +89,9 @@
         });
 
         // 搜索按钮点击事件
-        $('#btn-search-region').click(function () {
-            let key = $('#search-value').val();
-            table.reload('regiontable', {
+        $('#waterarea-btn-search').click(function () {
+            let key = $('#waterarea-search-value').val();
+            table.reload('waterareatable', {
                 where: {searchkey: key},
                 url: "[[@{/region/search}]]",
                 page: {
@@ -102,7 +102,7 @@
                 }
             });
         });
-        $('#btn-add-region').click(function () {
+        $('#waterarea-btn-add').click(function () {
             showModel();
         });
         let showModel = function (data) {
@@ -123,7 +123,7 @@
                                 var treeData = region_index_shortenTitle(data.regions);
                                 layui.use('tree', function () {
                                     var tree = layui.tree;
-                                    tree.reload('regiontree', {
+                                    tree.reload('waterarea-tree', {
                                         data: treeData
                                     })
                                 });
@@ -136,8 +136,8 @@
                         }
                     });
                     //  更新表格
-                    let key = data ? $('#search-value').val() : '';
-                    table.reload('regiontable', {
+                    let key = data ? $('#waterarea-search-value').val() : '';
+                    table.reload('waterareatable', {
                         where: {searchkey: key},
                         url: "[[@{/region/search}]]",
                         page: {
@@ -160,7 +160,7 @@
             });
         };
         // 工具条点击事件
-        table.on('tool(regiontable)', function (obj) {
+        table.on('tool(waterareatable)', function (obj) {
             let data = obj.data;
             let layEvent = obj.event;
             if (layEvent === 'edit') {
@@ -191,7 +191,7 @@
                                     var treeData = region_index_shortenTitle(data.regions);
                                     layui.use('tree', function () {
                                         var tree = layui.tree;
-                                        tree.reload('regiontree', {
+                                        tree.reload('waterarea-tree', {
                                             data: treeData
                                         })
                                     });
@@ -204,8 +204,8 @@
                             }
                         });
                         //  更新表格
-                        let key = $('#search-value').val();
-                        table.reload('regiontable', {
+                        let key = $('#waterarea-search-value').val();
+                        table.reload('waterareatable', {
                             where: {searchkey: key},
                             url: "[[@{/region/search}]]",
                             page: {
@@ -223,7 +223,7 @@
                     } else {
                         layer.msg(data.retmsg, {icon: 2});
                     }
-                    table.reload('regiontable', {});
+                    table.reload('waterareatable', {});
                 }, function (ret) {
                     console.log(ret);
                     layer.closeAll('loading');
@@ -244,11 +244,11 @@
                 layui.use('tree', function () {
                     var tree = layui.tree;
                     var inst1 = tree.render({
-                        elem: '#regiontree'  //绑定元素
+                        elem: '#waterarea-tree'  //绑定元素
                         , data: treeData
-                        , id: 'regiontree'
+                        , id: 'waterarea-tree'
                         , click: function (region) {
-                            table.reload("regiontable", {
+                            table.reload("waterareatable", {
                                 url: '[[@{/region/areano}]]',
                                 where: {
                                     areano: region.data.id
diff --git a/src/main/resources/templates/system/useraccount/index.html b/src/main/resources/templates/system/useraccount/index.html
new file mode 100644
index 0000000..eae659b
--- /dev/null
+++ b/src/main/resources/templates/system/useraccount/index.html
@@ -0,0 +1,104 @@
+<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">
+            <div class="layui-fluid">
+                <div class="layui-row">
+                    <div class="layui-col-md4">
+                        <label style="width: 60px" class="layui-form-label">姓名</label>
+                        <input type="text" class="layui-input search-input"
+                               id="wateruseracc-username-search-value">
+                    </div>
+                    <div class="layui-col-md6">
+                        <label style="width: 60px" class="layui-form-label">市民卡号</label>
+                        <input id="wateruseracc-cardno-search-value" class="layui-input search-input" type="text"/>
+                    </div>
+                    <div class="layui-col-md2">
+                        <button id="btn-search-useracc" class="layui-btn icon-btn" data-type="search"
+                                style="margin-left: 100px"><i
+                                class="layui-icon">&#xe615;</i>查询
+                        </button>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <hr/>
+        <div class="layui-fluid" style="padding: 0">
+            <div class="layui-row">
+                <div>
+                    <table class="layui-table" id="wateruseracctable" lay-filter="wateruseracctable"></table>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script>
+
+    layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+        let form = layui.form;
+        let table = layui.table;
+        let admin = layui.admin;
+        // 渲染表格
+        table.render({
+            elem: '#wateruseracctable',
+            url: '[[@{/useracc/list}]]',
+            where: {
+                username: '',
+                cardno: ''
+            },
+            page: true,
+            cols: [
+                [
+                    {field: 'username', align: 'center', title: '姓名'},
+                    {field: 'cardno', align: 'center', title: '卡号'},
+                    {field: 'notaccamount', align: 'center', title: '未入账金额'},
+                    {
+                        field: 'status',
+                        align: 'center',
+                        title: '账户状态',
+                        templet: function (item) {
+                            if (item.status === 'normal') {
+                                return '正常'
+                            } else if (item.status === 'abnormal') {
+                                return '异常'
+                            } else if (item.status === 'unuse') {
+                                return '未启用';
+                            } else if (item.status === 'closed') {
+                                return '注销';
+                            } else {
+                                return item.status
+                            }
+                        }
+                    }
+                ]
+            ]
+        });
+
+        // 搜索按钮点击事件
+        $('#btn-search-useracc').click(function () {
+            var username = $('#wateruseracc-username-search-value').val().trim();
+            var cardno = $('#wateruseracc-cardno-search-value').val().trim();
+            table.reload('wateruseracctable', {
+                where: {
+                    username: username,
+                    cardno: cardno
+                },
+                url: "[[@{/useracc/list}]]",
+                page: {
+                    curr: 1
+                },
+                text: {
+                    none: '没有符合查询条件的流水'
+                }
+            });
+        });
+    });
+</script>
+
+
