新增了用户信息查询页面,修改了流水统计功能
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>
+
+