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: '没有符合查询条件的流水'
