增加了流水统计功能,修改了部分设备api接口
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java b/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
index bd3c315..f1e89d7 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
@@ -7,10 +7,14 @@
 @Entity
 @Table(name = "TB_PERSON_IDENTITY")
 public class TPersonIdentity {
+  //  市民卡号
   @Id
   @Column(name = "THIRD_UID", nullable = false, length = 60)
   private String thirdUid;
 
+  @Column(name = "CARDPHYID",length = 60)
+  private String cardphyId;
+
   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "USERID")
   private TPerson person; //绑定的系统用户
@@ -30,13 +34,22 @@
   public TPersonIdentity() {
   }
 
-  public TPersonIdentity(String thirdUid, TPerson person, String status, Integer lossflag, Integer lockflag, String createtime) {
+  public TPersonIdentity(String thirdUid, TPerson person, String status, Integer lossflag, Integer lockflag, String createtime,String cardphyId) {
     this.thirdUid = thirdUid;
     this.person = person;
     this.status = status;
     this.lossflag = lossflag;
     this.lockflag = lockflag;
     this.createtime = createtime;
+    this.cardphyId = cardphyId;
+  }
+
+  public String getCardphyId() {
+    return cardphyId;
+  }
+
+  public void setCardphyId(String cardphyId) {
+    this.cardphyId = cardphyId;
   }
 
   public String getThirdUid() {
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/WaterDeviceParam.java b/src/main/java/com/supwisdom/dlpay/framework/util/WaterDeviceParam.java
index 8998a41..22534a9 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/WaterDeviceParam.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/WaterDeviceParam.java
@@ -11,18 +11,18 @@
     public static final String devOfflineMaxHour = "devOfflineMaxHour";
     //  每百毫升脉冲数
     public static final String pulseInHML = "pulseInHML";
-    //  系统日期时间
-    public static final String systemDateTime = "systemDateTime";
     //  刷卡单次出水上限
     public static final String waterLimit = "waterlimit";
     //  单位扣费金额
     public static final String feeAmount = "feeamount";
+    //  单位扣费流量
+    public static final String feeUnit = "feeunit";
     //  交易号
     public static final String billNo = "billno";
     //  从第多少百毫升开始计费
-    public static final String feeUnit = "feeunit";
+    public static final String feestart = "feestart";
     //  二维码失效时间
-    public static final String vaildTime = "vaildtime";
+    public static final String validTime = "validtime";
     //  二维码的url
     public static final String url = "url";
     //  用户授权认证状态
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 d60e949..0c067dc 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
@@ -41,5 +41,5 @@
     PageResult<TPointsAccount> getUserPointDTL(PersonParamBean param);
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
-    TPerson getPersonByThirdUid(String thirdUid);
+    TPersonIdentity getPersonIdentityByThirdUid(String thirdUid);
 }
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 09b7358..e7f8fd5 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
@@ -177,10 +177,10 @@
   }
 
   @Override
-  public TPerson getPersonByThirdUid(String thirdUid) {
+  public TPersonIdentity getPersonIdentityByThirdUid(String thirdUid) {
     TPersonIdentity personIdentity = personIdentityDao.getByThirdUid(thirdUid);
     if (personIdentity != null) {
-      return personIdentity.getPerson();
+      return personIdentity;
     }
     return null;
   }
diff --git a/src/main/java/com/supwisdom/dlpay/water/dao/AreaDao.java b/src/main/java/com/supwisdom/dlpay/water/dao/AreaDao.java
index b63207b..ad569f2 100644
--- a/src/main/java/com/supwisdom/dlpay/water/dao/AreaDao.java
+++ b/src/main/java/com/supwisdom/dlpay/water/dao/AreaDao.java
@@ -29,4 +29,6 @@
     TArea findByAvailableAndAreaNameAndAreanoNot(Integer available, String reiName, Integer regino);
 
     List<TArea> findByAvailableAndParentId(Integer available, Integer parentId);
+
+    Page<TArea> findByAvailableAndAreano(Integer available, Integer regino,Pageable pageable);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/domain/TTransdtl.java b/src/main/java/com/supwisdom/dlpay/water/domain/TTransdtl.java
index cf68fd4..f8e4b79 100644
--- a/src/main/java/com/supwisdom/dlpay/water/domain/TTransdtl.java
+++ b/src/main/java/com/supwisdom/dlpay/water/domain/TTransdtl.java
@@ -63,6 +63,17 @@
   @Column(name = "uploadstatus")
   private Boolean uploadStatus;
 
+  @Column(name = "cardphyid",length = 60)
+  private String cardPhyId;
+
+  public String getCardPhyId() {
+    return cardPhyId;
+  }
+
+  public void setCardPhyId(String cardPhyId) {
+    this.cardPhyId = cardPhyId;
+  }
+
   public Boolean getUploadStatus() {
     return uploadStatus;
   }
diff --git a/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlDTO.java b/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlDTO.java
index e107ada..76c4ea5 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlDTO.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlDTO.java
@@ -1,7 +1,5 @@
 package com.supwisdom.dlpay.water.pojo;
 
-import lombok.Data;
-
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.Id;
@@ -34,6 +32,17 @@
     private String areaname;
     @Column
     private Integer areano;
+    @Column
+    private String cardphyid;
+
+
+    public String getCardphyid() {
+        return cardphyid;
+    }
+
+    public void setCardphyid(String cardphyid) {
+        this.cardphyid = cardphyid;
+    }
 
     public String getBillno() {
         return billno;
diff --git a/src/main/java/com/supwisdom/dlpay/water/service/AreaService.java b/src/main/java/com/supwisdom/dlpay/water/service/AreaService.java
index a191204..680b94b 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/AreaService.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/AreaService.java
@@ -38,4 +38,7 @@
 
   @Transactional(rollbackFor = Exception.class)
   boolean existSubArea(Integer regino);
+
+  @Transactional(rollbackFor = Exception.class,readOnly = true)
+  PageResult<TArea> queryAreaByAreaNo(Integer areano);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/service/impl/AreaServiceImpl.java b/src/main/java/com/supwisdom/dlpay/water/service/impl/AreaServiceImpl.java
index f2ab078..b80df68 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/impl/AreaServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/impl/AreaServiceImpl.java
@@ -30,10 +30,7 @@
     public PageResult<TArea> queryAreasByParentId(RegionSearchBean param) {
         Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize());
         Page<TArea> page = regionDao.findByAvailableAndParentIdOrderByAreano(1, param.getParentId(), pageable);
-        page.get().forEach(area -> {
-            Optional<TArea> optional = regionDao.findByAvailableAndAreano(1, area.getParentId());
-            optional.ifPresent(parentArea -> area.setParentName(parentArea.getAreaName()));
-        });
+        setParentArea(page);
         PageResult<TArea> result = new PageResult<>(page);
         List<TArea> data = result.getData();
         if (param.getPageNo() == 1) {
@@ -84,10 +81,7 @@
         } else {
             page = regionDao.findAllByAvailableOrderByAreano(1, pageable);
         }
-        page.get().forEach(area -> {
-            Optional<TArea> optional = regionDao.findByAvailableAndAreano(1, area.getParentId());
-            optional.ifPresent(parentArea -> area.setParentName(parentArea.getAreaName()));
-        });
+        setParentArea(page);
         return new PageResult<>(page);
     }
 
@@ -150,5 +144,18 @@
         return subRegion != null && subRegion.size() != 0;
     }
 
+    @Override
+    public PageResult<TArea> queryAreaByAreaNo(Integer areano) {
+        Pageable pageable = PageRequest.of(0,1);
+        Page<TArea> page = regionDao.findByAvailableAndAreano(1, areano, pageable);
+        setParentArea(page);
+        return new PageResult<>(page);
+    }
 
+    private void setParentArea(Page<TArea> page) {
+        page.get().forEach(area -> {
+            Optional<TArea> optional = regionDao.findByAvailableAndAreano(1, area.getParentId());
+            optional.ifPresent(parentArea -> area.setParentName(parentArea.getAreaName()));
+        });
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/service/impl/DeviceServiceImpl.java b/src/main/java/com/supwisdom/dlpay/water/service/impl/DeviceServiceImpl.java
index ae40828..4e34676 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/impl/DeviceServiceImpl.java
@@ -163,7 +163,7 @@
 
     @Override
     public List<TDictionary> groupStatus() {
-        return dictionaryDao.findAllByDicttype("1");
+        return dictionaryDao.findAllByDicttype("device_status");
     }
 
     @Override
@@ -172,7 +172,7 @@
         Specification<TDevice> specification = (Specification<TDevice>) (root, query, cb) -> {
             List<Predicate> predicates = new ArrayList<>();
             if (!StringUtil.isEmpty(param.getDeviceno())) {
-                predicates.add(cb.equal(root.get("deviceno").as(Integer.class), param.getDeviceno()));
+                predicates.add(cb.like(root.get("deviceno"),"%" + param.getDeviceno() + "%"));
             }
             if (param.getAreano() != null) {
                 predicates.add(cb.equal(root.get("areano").as(Integer.class), param.getAreano()));
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/api_request_param.kt b/src/main/kotlin/com/supwisdom/dlpay/water/api_request_param.kt
index 8acd715..e408e60 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/api_request_param.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/api_request_param.kt
@@ -70,7 +70,10 @@
     var termtime: String = ""
 
     @Sign
-    var cardno: String = ""
+    var citizenCardno: String = ""
+
+    @Sign
+    var cardphyid: String = ""
 
     override fun checkParam(): Boolean {
         if (deviceno.length != 8 || deviceno.any { it !in '0'..'9' }) {
@@ -82,9 +85,13 @@
             throw RequestParamCheckException(TradeErrorCode.INPUT_DATA_ERROR, "设备日期时间错误")
         }
 
-        if (cardno.isEmpty()) {
+        if (citizenCardno.isEmpty()) {
             throw RequestParamCheckException(TradeErrorCode.INPUT_DATA_ERROR,
-                    "卡号长度错误")
+                    "市民卡号长度错误")
+        }
+        if (cardphyid.isEmpty()) {
+            throw RequestParamCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+                    "物理卡号长度错误")
         }
         return true
     }
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 948aa7d..364cc95 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
@@ -37,15 +37,16 @@
     @Autowired
     private lateinit var businessparaDao: BusinessparaDao
 
-    @GetMapping("/devicelogin")
-    fun deviceLogin(@RequestBody param: DeviceLoginParam): ResponseEntity<Any> {
+    @PostMapping("/devicelogin")
+    fun deviceLogin(param: DeviceLoginParam): ResponseEntity<Any> {
         try {
             val result = deviceService.deviceLogin(param)
             if (result["flag"] == true) {
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
                         .data(WaterDeviceParam.devOfflineMaxHour, result[WaterDeviceParam.devOfflineMaxHour]!!)
                         .data(WaterDeviceParam.pulseInHML, result[WaterDeviceParam.pulseInHML]!!)
-                        .data(WaterDeviceParam.systemDateTime, systemUtilService.sysdatetime.hostdatetime)
+                        .data(WaterDeviceParam.systemDate, systemUtilService.sysdatetime.hostdate)
+                        .data(WaterDeviceParam.systemTime, systemUtilService.sysdatetime.hosttime)
                         .success())
             }
             return ResponseEntity.ok(ResponseBodyBuilder.create()
@@ -58,7 +59,7 @@
 
 
     @RequestMapping("/linecheck", method = [RequestMethod.GET, RequestMethod.POST])
-    fun deviceLineCheck(@RequestBody param: DeviceLineCheckParam): ResponseEntity<Any> {
+    fun deviceLineCheck(param: DeviceLineCheckParam): ResponseEntity<Any> {
         try {
             val device = deviceService.lineCheck(param)
                     ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
@@ -75,11 +76,15 @@
     }
 
     @PostMapping("/card/purseinit")
-    fun cardPurseInit(@RequestBody param: CardPayRequest): ResponseEntity<Any> {
-        try {//1. 通过 cardno 检查用户以及合法性
-            val person = userDataService.getPersonByThirdUid(param.cardno)
+    fun cardPurseInit(param: CardPayRequest): ResponseEntity<Any> {
+        try {//1. 通过 citizenCardno 检查用户以及合法性
+            val personIdentity = userDataService.getPersonIdentityByThirdUid(param.citizenCardno)
                     ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
                             .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "未查询到您的身份信息"))
+            if (personIdentity.cardphyId == null || personIdentity.cardphyId != param.cardphyid) {
+                return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "物理卡号不匹配"))
+            }
             //2. 通过 deviceno 查询设备费率参数
             val deviceParam = deviceService.getParaMapByDeviceno(param.deviceno)
             //3. 创建 transdtl 记录初始流水
@@ -89,8 +94,9 @@
                 transDate = param.termdate
                 transTime = param.termtime
                 deviceno = param.deviceno
-                userid = person.userid
-                bankCardNo = param.cardno
+                userid = personIdentity.person.userid
+                bankCardNo = param.citizenCardno
+                cardPhyId = param.cardphyid
                 amount = 0.0
                 waterSumHundredLitre = 0
                 status = TradeDict.DTL_STATUS_INIT
@@ -103,6 +109,7 @@
                     .data(WaterDeviceParam.billNo, savedTrans.billno)
                     .data(WaterDeviceParam.feeAmount, deviceParam[WaterDeviceParam.feeAmount]!!)
                     .data(WaterDeviceParam.waterLimit, deviceParam[WaterDeviceParam.waterLimit]!!)
+                    .data(WaterDeviceParam.feestart, deviceParam[WaterDeviceParam.feestart]!!)
                     .data(WaterDeviceParam.feeUnit, deviceParam[WaterDeviceParam.feeUnit]!!)
                     .success())
         } catch (ex: Exception) {
@@ -112,7 +119,7 @@
     }
 
     @PostMapping("/qrcode/init")
-    fun qrcodePayInit(@RequestBody param: QrcodePayRequest): ResponseEntity<Any> {
+    fun qrcodePayInit(param: QrcodePayRequest): ResponseEntity<Any> {
         try {
             val deviceParam = deviceService.getParaMapByDeviceno(param.deviceno)
             //1. 创建并记录初始流水
@@ -136,7 +143,7 @@
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .data(WaterDeviceParam.billNo, savedTrans.billno)
                     .data(WaterDeviceParam.url, url)
-                    .data(WaterDeviceParam.vaildTime, deviceParam[WaterDeviceParam.vaildTime]!!)
+                    .data(WaterDeviceParam.validTime, deviceParam[WaterDeviceParam.validTime]!!)
                     .success())
         } catch (ex: Exception) {
             return ResponseEntity.ok(ResponseBodyBuilder.create()
@@ -144,20 +151,21 @@
         }
     }
 
-    @GetMapping("/qrcode/query")
-    fun qrcodeQuery(@RequestBody param: QrcodeQueryRequest): ResponseEntity<Any> {
-            val deviceParam = deviceService.getParaMapByDeviceno(param.deviceno)
-            val trans = transdtlService.queryTrans(param)
-            return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .data(WaterDeviceParam.billNo, trans.billno)
-                    .data(WaterDeviceParam.authStatus, trans.authStatus)
-                    //2为代扣模式
-                    .data(WaterDeviceParam.payStatus, 2)
-                    .data(WaterDeviceParam.feeAmount, deviceParam[WaterDeviceParam.feeAmount]!!)
-                    .data(WaterDeviceParam.feeUnit, deviceParam[WaterDeviceParam.feeUnit]!!)
-                    //  如果订单为已支付状态,支付金额多少
-                    .data(WaterDeviceParam.paidAmount, 0)
-                    .success())
+    @PostMapping("/qrcode/query")
+    fun qrcodeQuery(param: QrcodeQueryRequest): ResponseEntity<Any> {
+        val deviceParam = deviceService.getParaMapByDeviceno(param.deviceno)
+        val trans = transdtlService.queryTrans(param)
+        return ResponseEntity.ok(ResponseBodyBuilder.create()
+                .data(WaterDeviceParam.billNo, trans.billno)
+                .data(WaterDeviceParam.authStatus, trans.authStatus)
+                //2为代扣模式
+                .data(WaterDeviceParam.payStatus, 2)
+                .data(WaterDeviceParam.feeAmount, deviceParam[WaterDeviceParam.feeAmount]!!)
+                .data(WaterDeviceParam.feestart, deviceParam[WaterDeviceParam.feestart]!!)
+                .data(WaterDeviceParam.feeUnit, deviceParam[WaterDeviceParam.feeUnit]!!)
+                //  如果订单为已支付状态,支付金额多少
+                .data(WaterDeviceParam.paidAmount, 0)
+                .success())
     }
 
     @GetMapping("/confirm")
@@ -178,7 +186,7 @@
     }
 
     @PostMapping("/uploadrecord")
-    fun transdtlUpload(@RequestBody param: UploadRecordRequest): ResponseEntity<Any> {
+    fun transdtlUpload(param: UploadRecordRequest): ResponseEntity<Any> {
         // 1. 根据 billno 查询 transdtl , 并加锁
         val dtl = transdtlService.saveDeviceDtlData(param)
         return ResponseEntity.ok(ResponseBodyBuilder.create().data(WaterDeviceParam.billNo, dtl.billno)
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 fff95b0..c7abfc8 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
@@ -75,6 +75,22 @@
         }
     }
 
+    @GetMapping("/region/areano")
+    @ResponseBody
+    fun queryAreaByAreano(@RequestParam("areano")areano: Int): PageResult<TArea> {
+        try {
+            if (areano < 0) {
+                return PageResult(WaterErrorCode.REQUEST_DATA_ERROR, "请求参数错误")
+            }
+            areaService.queryAreaByAreaNo(areano)?.let {
+                return it
+            }
+            return PageResult(WaterErrorCode.DATA_NOTFOUND_ERROR, "区域未找到")
+        } catch (ex: Exception) {
+            return PageResult(WaterErrorCode.PROCESS_ERROR, "服务器繁忙,请稍后再试")
+        }
+    }
+
     @GetMapping("/region/search")
     @ResponseBody
     fun queryRegions(@RequestParam(value = "searchkey", required = false) searchKey: String?,
@@ -393,31 +409,35 @@
 
     @GetMapping("/dtlcount/list")
     @ResponseBody
-    fun queryDtlCount(@RequestParam("devicename", required = false) devicename: String,
-                      @RequestParam("areano", required = false) areanoStr: String,
-                      @RequestParam("transtime", required = false) transtime: String,
+    fun queryDtlCount(@RequestParam("devicename", required = false) devicename: String?,
+                      @RequestParam("areano", required = false) areanoStr: String?,
+                      @RequestParam("transtime", required = false) transtime: String?,
                       @RequestParam("page", defaultValue = "1", required = false) pageNo: Int,
                       @RequestParam("limit", defaultValue = "10", required = false) pageSize: Int): PageResult<TTransdtlCount> {
-        if (pageNo < 1 || pageSize < 1) {
-            return PageResult(WaterErrorCode.REQUEST_DATA_ERROR, "请求参数错误")
+        try {
+            if (pageNo < 1 || pageSize < 1) {
+                return PageResult(WaterErrorCode.REQUEST_DATA_ERROR, "请求参数错误")
+            }
+            val areano: Int?
+            areano = if (StringUtil.isEmpty(areanoStr)) {
+                null
+            } else {
+                areanoStr!!.toInt()
+            }
+            val searchBean = TransdtlCountSearchBean().apply {
+                this.pageNo = pageNo
+                this.pageSize = pageSize
+                this.devicename = devicename
+                this.areano = areano
+                this.transtime = transtime
+            }
+            transdtlService.queryTransdtlCountByParam(searchBean)?.let {
+                return it
+            }
+            return PageResult(WaterErrorCode.DATA_NOTFOUND_ERROR, "流水统计未找到")
+        } catch (ex: Exception) {
+            return PageResult(WaterErrorCode.PROCESS_ERROR, "系统繁忙")
         }
-        val areano: Int?
-        areano = if (StringUtil.isEmpty(areanoStr)) {
-            null
-        } else {
-            areanoStr.toInt()
-        }
-        val searchBean = TransdtlCountSearchBean().apply {
-            this.pageNo = pageNo
-            this.pageSize = pageSize
-            this.devicename = devicename
-            this.areano = areano
-            this.transtime = transtime
-        }
-        transdtlService.queryTransdtlCountByParam(searchBean)?.let {
-            return it
-        }
-        return PageResult(WaterErrorCode.DATA_NOTFOUND_ERROR, "流水统计未找到")
     }
 }
 
@@ -506,7 +526,7 @@
 
     @PostMapping("/areapara/deleteareapara")
     @ResponseBody
-    fun deleteAreapara(@RequestParam("groupid") groupid: Int?):JsonResult {
+    fun deleteAreapara(@RequestParam("groupid") groupid: Int?): JsonResult {
         try {
             if (null == groupid) {
                 return JsonResult.error("参数传递错误")
@@ -519,7 +539,7 @@
             }
         } catch (ex: WebCheckException) {
             return JsonResult.error(ex.message)
-        }catch (ex: Exception) {
+        } catch (ex: Exception) {
             ex.printStackTrace()
             return JsonResult.error("系统处理异常").put("exception", ex)!!
         }
@@ -538,16 +558,16 @@
             if (pageNo < 1 || pageSize < 1) {
                 return PageResult(WaterErrorCode.REQUEST_DATA_ERROR, "请求参数错误")
             }
-            return tAreaparaService.getAreaparaBindInfos(searchkey,pageNo,pageSize)
+            return tAreaparaService.getAreaparaBindInfos(searchkey, pageNo, pageSize)
         } catch (ex: Exception) {
             ex.printStackTrace()
-            return PageResult(WaterErrorCode.PROCESS_ERROR,"系统繁忙,请稍后重试")
+            return PageResult(WaterErrorCode.PROCESS_ERROR, "系统繁忙,请稍后重试")
         }
     }
 
     @GetMapping("/areapara/loadbindadd")
-    fun loadBindView(model: Model):String {
-        model.addAttribute("grouplist",tAreaparaService.queryAllAreaparaGroups())
+    fun loadBindView(model: Model): String {
+        model.addAttribute("grouplist", tAreaparaService.queryAllAreaparaGroups())
         return "/system/areaparabind/form"
     }
 
@@ -565,7 +585,7 @@
             JsonResult.error(ex.message)
         } catch (ex: Exception) {
             ex.printStackTrace()
-            JsonResult.error("系统处理异常").put("exception",ex)
+            JsonResult.error("系统处理异常").put("exception", ex)
         }
     }
 
@@ -587,7 +607,7 @@
 
     @GetMapping("/areapara/arealist")
     @ResponseBody
-    fun getAreaList(@RequestParam("searchkey") searchKey: String?):PageResult<TArea> {
+    fun getAreaList(@RequestParam("searchkey") searchKey: String?): PageResult<TArea> {
         return try {
             tAreaparaService.getAreaBySearch(searchKey)
         } catch (ex: Exception) {
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/service/transdtl_service.kt b/src/main/kotlin/com/supwisdom/dlpay/water/service/transdtl_service.kt
index 9320bfd..482aaf0 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/service/transdtl_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/service/transdtl_service.kt
@@ -16,11 +16,14 @@
 import com.supwisdom.dlpay.water.dao.TransdtlCountDao
 import com.supwisdom.dlpay.water.domain.TTransdtlCount
 import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.data.domain.Example
+import org.springframework.data.domain.ExampleMatcher
 import org.springframework.data.domain.PageRequest
 import org.springframework.data.jpa.domain.Specification
 import org.springframework.stereotype.Service
 import java.util.ArrayList
 import javax.persistence.EntityManager
+import javax.persistence.Query
 import javax.persistence.criteria.CriteriaBuilder
 import javax.persistence.criteria.CriteriaQuery
 import javax.persistence.criteria.Predicate
@@ -76,11 +79,11 @@
     }
 
     override fun queryTransdtlDTOByParam(param: TransdtlSearchBean): PageResult<TTransdtlDTO>? {
-        var sql =StringBuffer("select t1.billno,t1.amount,t1.bankcardno,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  " +
+        val sql = StringBuffer("select t1.billno,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," +
                 "(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")
-        var countSql =StringBuffer("select count(billno) " +
+        val countSql = StringBuffer("select count(billno) " +
                 "from (select dtl.*,person.name from tb_transdtl 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")
@@ -116,15 +119,15 @@
             map.put("areano", position++)
         }
         sql.append(" order by billno 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(), TTransdtlDTO::class.java)
         val countQuery = em.createNativeQuery(countSql.toString())
         map["devicename"]?.let {
             query.setParameter(it, "%" + param.devicename + "%")
             countQuery.setParameter(it, "%" + param.devicename + "%")
         }
         map["deviceno"]?.let {
-            query.setParameter(it, "%"+param.deviceno+"%")
-            countQuery.setParameter(it, "%"+param.deviceno+"%")
+            query.setParameter(it, "%" + param.deviceno + "%")
+            countQuery.setParameter(it, "%" + param.deviceno + "%")
         }
         map["areano"]?.let {
             query.setParameter(it, param.areano)
@@ -136,14 +139,14 @@
         }
         map["mindate"]?.let {
 
-            val timerange = param.transtime.replace("-","").split("  ")
+            val timerange = param.transtime.replace("-", "").split("  ")
             query.setParameter(it, timerange[0])
             query.setParameter(map["maxdate"]!!, timerange[1])
             countQuery.setParameter(it, timerange[0])
             countQuery.setParameter(map["maxdate"]!!, timerange[1])
         }
-        val transdtlDTO:List<TTransdtlDTO> = query.resultList as List<TTransdtlDTO>
-        val count:Int = countQuery.singleResult.toString().toInt()
+        val transdtlDTO: List<TTransdtlDTO> = query.resultList as List<TTransdtlDTO>
+        val count: Int = countQuery.singleResult.toString().toInt()
         val result: PageResult<TTransdtlDTO> = PageResult()
         result.apply {
             this.data = transdtlDTO
@@ -156,21 +159,21 @@
 
     override fun queryTransdtlCountByParam(param: TransdtlCountSearchBean): PageResult<TTransdtlCount> {
         val pageable = PageRequest.of(param.pageNo - 1, param.pageSize)
-        val specification = { root:Root<TTransdtlCount>, query:CriteriaQuery<Any>, cb:CriteriaBuilder ->
+        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 + "%"))
+                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[0]))
+                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
-        } as Specification<TTransdtlCount>
+        }
         val dtlCountPage = transdtlCountDao.findAll(specification, pageable)
         return PageResult<TTransdtlCount>(dtlCountPage)
     }
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index 0783339..aa3d4e9 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -38,7 +38,7 @@
 INSERT INTO "tb_role_function"("id", "functionid", "permissions", "roleid") VALUES ('6', 6, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
 INSERT INTO "tb_role_function"("id", "functionid", "permissions", "roleid") VALUES ('7', 7, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
 INSERT INTO "tb_role_function"("id", "functionid", "permissions", "roleid") VALUES ('8', 8, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
--- 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 ('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');
 
@@ -109,26 +109,27 @@
 
 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") VALUES ('1', NULL, 0, 0, '1', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_person_identity"("third_uid", "createtime", "lockflag", "lossflag", "status", "userid", "cardphyid") VALUES ('000000000000000000000000', NULL, 0, 0, '1', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '6655ec27');
 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_businesspara"("parakey", "paraval") VALUES ('water_auth_url', 'http://172.28.43.20:8080/water/api/device/confirm?billno=');
 
-INSERT INTO "tb_dictionary"("dictval", "dicttype", "dictcaption", "dicttypename") VALUES ('正常', 1, 'normal', '设备状态');
-INSERT INTO "tb_dictionary"("dictval", "dicttype", "dictcaption", "dicttypename") VALUES ('注销', 1, 'closed', '设备状态');
-INSERT INTO "tb_dictionary"("dictval", "dicttype", "dictcaption", "dicttypename") VALUES ('签出', 1, 'logout', '设备状态');
+INSERT INTO "tb_dictionary"("dictval", "dicttype", "dictcaption", "dicttypename") VALUES ('正常', 'device_status', 'normal', '设备状态');
+INSERT INTO "tb_dictionary"("dictval", "dicttype", "dictcaption", "dicttypename") VALUES ('注销', 'device_status', 'closed', '设备状态');
+INSERT INTO "tb_dictionary"("dictval", "dicttype", "dictcaption", "dicttypename") VALUES ('签出', 'device_status', 'logout', '设备状态');
 
-INSERT INTO "tb_areapara_group"("groupid", "globalflag", "groupname", "lastsaved", "verno") VALUES (1, 't', '默认参数组', '20190628133646', 7);
+INSERT INTO "tb_areapara_group"("groupid", "globalflag", "groupname", "lastsaved", "verno") VALUES (1, 't', '默认参数组', '20190628133646', 1);
 
+INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('feestart', 1, '10', '0', '从第多少百毫升开始计费(单位:百毫升)', '0', 'N');
+INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('feeunit', 1, '10', '1', '单位扣费流量(单位:百毫升)', '1', 'N');
+INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('feeamount', 1, '100', '1', '单位扣费金额(单位:分)', '10', 'N');
 INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('waittime', 1, '180', '60', '出水等待时间(单位:秒):超出这个时间,自动关闭水阀门', '90', 'N');
-INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('vaildtime', 1, '240', '60', '二维码有效时间(单位:秒)', '180', 'N');
 INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('app_water_limit', 1, '500', '1', 'app单次用水上限(单位:百毫升)', '200', 'N');
 INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('amount_limit', 1, '50', '1', '单次消费金额上限(单位:元)', '30', 'N');
 INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('month_amount_limit', 1, '1500', '30', '月累计消费金额上限(单位:元)', '900', 'N');
 INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('devOfflineMaxHour', 1, '168', '1', '设备最大脱机时间(单位:小时)', '72', 'N');
 INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('pulseInHML', 1, '100', '1', '每百毫升流量计的脉冲数(单位:个)', '40', 'N');
 INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('waterlimit', 1, '500', '1', '单次用水上限(单位:百毫升)', '300', 'N');
-INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('feeamount', 1, '100', '1', '单位扣费金额(单位:百毫升/分)', '10', 'N');
-INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('feeunit', 1, '10', '0', '从第多少百毫升开始计费(单位:百毫升)', '0', 'N');
+INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('validtime', 1, '240', '60', '二维码有效时间(单位:秒)', '180', 'N');
 
 
 commit;
\ No newline at end of file
diff --git a/src/main/resources/templates/system/areapara/index.html b/src/main/resources/templates/system/areapara/index.html
index 8470707..b99f469 100644
--- a/src/main/resources/templates/system/areapara/index.html
+++ b/src/main/resources/templates/system/areapara/index.html
@@ -122,6 +122,7 @@
                     title: "修改参数组【" + data.groupid + "_" + data.groupname + "】",
                     path: '[[@{/areapara/loadadd}]]?groupid=' + data.groupid,
                     area: '1200px',
+                    offset: '10px',
                     finish: function () {
                         table.reload('areaparagroupTable');
                     }
diff --git a/src/main/resources/templates/system/device/form.html b/src/main/resources/templates/system/device/form.html
index e8d0b5d..d5e5922 100644
--- a/src/main/resources/templates/system/device/form.html
+++ b/src/main/resources/templates/system/device/form.html
@@ -1,6 +1,6 @@
 <!-- operator表单弹窗 -->
 <form id="form" lay-filter="form" class="layui-form model-form">
-    <input name="areano" id="areano" type="hidden"/>
+    <input name="deviceid" id="deviceid" type="hidden"/>
     <div class="layui-form-item">
         <label class="layui-form-label">设备名称</label>
         <div class="layui-input-block">
diff --git a/src/main/resources/templates/system/device/index.html b/src/main/resources/templates/system/device/index.html
index 6e6ad25..6a90044 100644
--- a/src/main/resources/templates/system/device/index.html
+++ b/src/main/resources/templates/system/device/index.html
@@ -20,7 +20,7 @@
                     </div>
                     <div class="layui-col-md4">
                         <label style="width: 60px" class="layui-form-label">所在小区</label>
-                        <select name="parentId" id="select-region" lay-search>
+                        <select name="water-device-parentId" id="select-region" lay-search>
 
                         </select>
                     </div>
@@ -34,7 +34,7 @@
                 <div style="margin-top: 20px"/>
                 <div class="layui-row">
                     <label style="width: 60px" class="layui-form-label">设备状态</label>
-                    <select name="parentId" id="select-status">
+                    <select name="water-device-status" id="select-status">
 
                     </select>
                 </div>
@@ -242,7 +242,7 @@
                 layer.load(2);
                 let token = $("meta[name='_csrf_token']").attr("value");
                 admin.go('[[@{/device/del}]]', {
-                    areano: data.areano,
+                    deviceid: data.deviceid,
                     _csrf: token
                 }, function (data) {
                     console.log(data.code);
diff --git a/src/main/resources/templates/system/dtlcount/index.html b/src/main/resources/templates/system/dtlcount/index.html
index c6d8758..8b1fe25 100644
--- a/src/main/resources/templates/system/dtlcount/index.html
+++ b/src/main/resources/templates/system/dtlcount/index.html
@@ -21,7 +21,7 @@
                     </div>
                     <div class="layui-col-md3">
                         <label style="width: 60px" class="layui-form-label">所在小区</label>
-                        <select name="parentId" id="dtlcount-select-region" lay-search>
+                        <select name="water-dtlcount-parentId" id="dtlcount-select-region" lay-search>
 
                         </select>
                     </div>
@@ -77,8 +77,8 @@
                         html += '<option value="' + regions[i].areano + '">' + regions[i].areaName + '</option>'
                     }
                     $("#dtlcount-select-region").html(html);
-                    form.render('select')
                 }
+                form.render('select')
             },
             error: function (xhr) {
                 console.log(xhr)
@@ -96,57 +96,25 @@
             page: true,
             cols: [
                 [
-                    {field: 'billno', align: 'center', title: '流水号', width: 190},
-                    {field: 'deviceno', align: 'center', title: '终端号', width: 95},
+                    {field: 'id', align: 'center', title: '编号', width: 190},
                     {field: 'devicename', align: 'center', title: '设备名称', width: 110},
+                    {field: 'deviceno', align: 'center', title: '设备编号', width: 110},
+                    {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: 'amount', align: 'center', title: '金额', width: 75},
-                    {field: 'username', align: 'center', title: '姓名', width: 75},
-                    {field: 'bankcardno', align: 'center', title: '卡号'},
                     {
-                        field: 'transdate',
+                        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)
-                        }
-                    },
-                    {
-                        field: 'transtype',
-                        align: 'center',
-                        title: '支付方式',
-                        width: 90,
-                        templet: function (item) {
-                            if (item.mode === 'qrcode') {
-                                return '扫码'
-                            } else if (item.mode === 'card') {
-                                return '市民卡'
-                            } else {
-                                return item.mode
-                            }
-                        }
-                    },
-                    {
-                        field: 'transStatus',
-                        align: 'center',
-                        title: '状态',
-                        templet: function (item) {
-                            if (item.status === 'init') {
-                                return '初始化'
-                            } else if (item.status === 'wip') {
-                                return '处理中'
-                            } else if (item.status === 'fail') {
-                                return '失败';
-                            } else if (item.status === 'success') {
-                                return '成功';
-                            } else {
-                                return item.status
-                            }
-                        }
+                        // templet: function (item) {
+                        //     var date = item.transdate
+                        //     date = date.slice(0, 4) + '/' + date.slice(4)
+                        //     return date.slice(0, 7) + '/' + date.slice(7)
+                        // }
                     }
                 ]
             ]
diff --git a/src/main/resources/templates/system/region/form.html b/src/main/resources/templates/system/region/form.html
index 352b019..f4fc7c8 100644
--- a/src/main/resources/templates/system/region/form.html
+++ b/src/main/resources/templates/system/region/form.html
@@ -57,15 +57,15 @@
                 url: "[[@{/region/all}]]",
                 type: "GET",
                 success: function (data) {
+                    var html = '<option value="0">根区域</option>'
                     if (data.retcode == '0') {
-                        var html = '<option value="0">根区域</option>'
                         var regions = data.regions
                         for (var i = 0; i < regions.length; i++) {
                             html += '<option value="' + regions[i].areano + '">' + regions[i].areaName + '</option>'
                         }
-                        $("#selectCity").html(html);
-                        form.render('select', 'form')
                     }
+                    $("#selectCity").html(html);
+                    form.render('select', 'form')
                 },
                 error: function (xhr) {
                     console.log(xhr)
diff --git a/src/main/resources/templates/system/region/index.html b/src/main/resources/templates/system/region/index.html
index 515ec25..871456f 100644
--- a/src/main/resources/templates/system/region/index.html
+++ b/src/main/resources/templates/system/region/index.html
@@ -109,7 +109,6 @@
             let region_index_title = data ? '编辑区域' : '新增区域';
             if (data) {
                 admin.putTempData('t_func', data);
-                console.log(data)
             }
             admin.popupCenter({
                 title: region_index_title,
@@ -181,7 +180,6 @@
                     areano: data.areano,
                     _csrf: token
                 }, function (data) {
-                    console.log(data.code);
                     layer.closeAll('loading');
                     if (data.retcode == 0) {
                         layer.msg(data.msg, {icon: 1});
@@ -237,7 +235,6 @@
     //  查询区域树数据
 
     //渲染数据
-
     $.ajax({
         url: '[[@{/region/tree}]]',
         type: 'GET',
@@ -251,17 +248,15 @@
                         , data: treeData
                         , id: 'regiontree'
                         , click: function (region) {
-                            if (region.data.children.size != 0) {
-                                table.reload("regiontable", {
-                                    url: "[[@{/region/search}]]",
-                                    where:{
-                                        searchkey:region.data.title
-                                    }
-                                    , page: {
-                                        curr: 1
-                                    }
-                                });
-                            }
+                            table.reload("regiontable", {
+                                url: '[[@{/region/areano}]]',
+                                where: {
+                                    areano: region.data.id
+                                },
+                                page: {
+                                    curr: 1
+                                }
+                            });
                         }
                     });
                 });
diff --git a/src/main/resources/templates/system/transdtl/index.html b/src/main/resources/templates/system/transdtl/index.html
index d3bce23..fefeb56 100644
--- a/src/main/resources/templates/system/transdtl/index.html
+++ b/src/main/resources/templates/system/transdtl/index.html
@@ -21,7 +21,8 @@
                     </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" maxlength="8"/>
+                        <input id="waterdtl-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"
@@ -39,7 +40,7 @@
                     </div>
                     <div class="layui-col-md4">
                         <label style="width: 60px" class="layui-form-label">所在小区</label>
-                        <select name="parentId" id="waterdtl-select-region" lay-search>
+                        <select name="water-transdtl-parentId" id="waterdtl-select-region" lay-search>
 
                         </select>
                     </div>
@@ -75,7 +76,7 @@
         laydate.render({
             elem: '#waterdtl-transtime-search-value',
             range: true,
-            trigger:'click'
+            trigger: 'click'
         })
         //  渲染区域选择框
         $.ajax({
@@ -89,8 +90,8 @@
                         html += '<option value="' + regions[i].areano + '">' + regions[i].areaName + '</option>'
                     }
                     $("#waterdtl-select-region").html(html);
-                    form.render('select')
                 }
+                form.render('select')
             },
             error: function (xhr) {
                 console.log(xhr)
@@ -110,19 +111,19 @@
             page: true,
             cols: [
                 [
-                    {field: 'billno', align: 'center', title: '流水号', width: 190},
-                    {field: 'deviceno', align: 'center', title: '设备号', width: 95},
-                    {field: 'devicename', align: 'center', title: '设备名称', width: 110},
+                    {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: '用水量', width: 85},
-                    {field: 'amount', align: 'center', title: '金额', width: 75},
-                    {field: 'username', align: 'center', title: '姓名', width: 75},
+                    {field: 'waterSumHundredLitre', align: 'center', title: '用水量'},
+                    {field: 'amount', align: 'center', title: '金额'},
+                    {field: 'username', align: 'center', title: '姓名'},
                     {field: 'bankcardno', align: 'center', title: '卡号'},
+                    {field: 'cardphyid', align: 'center', title: '物理卡号'},
                     {
                         field: 'transdate',
                         align: 'center',
                         title: '交易时间',
-                        width: 105,
                         templet: function (item) {
                             var date = item.transdate
                             date = date.slice(0, 4) + '/' + date.slice(4)
@@ -133,7 +134,6 @@
                         field: 'transtype',
                         align: 'center',
                         title: '支付方式',
-                        width: 90,
                         templet: function (item) {
                             if (item.mode === 'qrcode') {
                                 return '扫码'
@@ -182,8 +182,8 @@
                     transtime: transtime
                 },
                 url: "[[@{/transdtl/list}]]",
-                page:{
-                    curr:1
+                page: {
+                    curr: 1
                 },
                 text: {
                     none: '没有符合查询条件的流水'