diff --git a/src/main/java/com/supwisdom/dlpay/water/domain/TAccdtl.java b/src/main/java/com/supwisdom/dlpay/water/domain/TAccdtl.java
index 275c951..d459b5e 100644
--- a/src/main/java/com/supwisdom/dlpay/water/domain/TAccdtl.java
+++ b/src/main/java/com/supwisdom/dlpay/water/domain/TAccdtl.java
@@ -38,9 +38,12 @@
     @NotNull
     private String mode;
 
-    @Column(precision = 10, scale = 2)
+    @Column(precision = 10, scale = 3)
     private Double amount;
 
+    @Column(precision = 10, scale = 2)
+    private Double actualamount;
+
     @Column(name = "water_in_100ml", precision = 10)
     private Integer waterSumHundredLitre;
 
@@ -157,4 +160,12 @@
     public void setCardPhyId(String cardPhyId) {
         this.cardPhyId = cardPhyId;
     }
+
+    public Double getActualamount() {
+        return actualamount;
+    }
+
+    public void setActualamount(Double actualamount) {
+        this.actualamount = actualamount;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/water/domain/TCollectdtl.java b/src/main/java/com/supwisdom/dlpay/water/domain/TCollectdtl.java
index d1e2226..adf0f38 100644
--- a/src/main/java/com/supwisdom/dlpay/water/domain/TCollectdtl.java
+++ b/src/main/java/com/supwisdom/dlpay/water/domain/TCollectdtl.java
@@ -38,9 +38,13 @@
   @NotNull
   private String mode;
 
-  @Column(precision = 10, scale = 2)
+  @Column(precision = 10, scale = 3)
   private Double amount;
 
+  @Column(precision = 10, scale = 2)
+  private Double actualamount;
+
+
   @Column(name = "water_in_100ml", precision = 10)
   private Integer waterSumHundredLitre;
 
@@ -215,4 +219,12 @@
   public void setNextCreditTime(String nextCreditTime) {
     this.nextCreditTime = nextCreditTime;
   }
+
+  public Double getActualamount() {
+    return actualamount;
+  }
+
+  public void setActualamount(Double actualamount) {
+    this.actualamount = actualamount;
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/domain/TTransdtlCount.java b/src/main/java/com/supwisdom/dlpay/water/domain/TTransdtlCount.java
index 64e5b13..99515a3 100644
--- a/src/main/java/com/supwisdom/dlpay/water/domain/TTransdtlCount.java
+++ b/src/main/java/com/supwisdom/dlpay/water/domain/TTransdtlCount.java
@@ -30,9 +30,12 @@
     @Column(name = "count", length = 32)
     private Integer count;
 
-    @Column(precision = 10, scale = 2)
+    @Column(precision = 10, scale = 3)
     private Double amount;
 
+    @Column(precision = 10, scale = 2)
+    private Double actualamount;
+
     @Column(name = "water", precision = 10)
     private Integer water;
 
@@ -99,4 +102,12 @@
     public void setWater(Integer water) {
         this.water = water;
     }
+
+    public Double getActualamount() {
+        return actualamount;
+    }
+
+    public void setActualamount(Double actualamount) {
+        this.actualamount = actualamount;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java b/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
index 79513a6..b7e121a 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
@@ -51,6 +51,7 @@
     @Async("waterPay")
     public void waterPay(Integer cobillno) {
         TCollectdtl collectdtl = collectdtlService.findByCobillnoForUpdate(cobillno);
+        //  设置已入账次数和日期
         String lastCredit = collectdtl.getLastCredit();
         SystemDateTime dateTime = systemUtilService.getSysdatetime();
         String currentDate = dateTime.getHostdate();
@@ -66,6 +67,11 @@
         String nextTime = DateUtil.addDateHour(dateTime.getHostdatetime(), Integer.valueOf(intervalHour));
         collectdtl.setNextCreditTime(nextTime);
         collectdtl.setLastCredit(currentCredit);
+        // 设置实际扣费金额， 实际扣费金额舍去厘
+        if (collectdtl.getActualamount() == null) {
+            int actualAmount = ((int) (collectdtl.getAmount() * 1000)) / 10;
+            collectdtl.setActualamount(actualAmount / 100.0);
+        }
         collectdtlService.saveCollectDtl(collectdtl);
         if (!TradeDict.DTL_STATUS_WIP.equals(collectdtl.getStatus())) {
             logger.error("待入账的采集流水" + cobillno + "状态不正确");
@@ -84,6 +90,10 @@
         //  是否已生成入账流水
         if (collectdtl.getEntryno() != null) {
             TAccdtl accdtl = accdtlService.findByBillno(collectdtl.getEntryno());
+            if (null == accdtl.getActualamount()) {
+                accdtl.setActualamount(collectdtl.getActualamount());
+                accdtlService.saveAccdtl(accdtl);
+            }
             String accStatus = accdtl.getStatus();
             if (null == accStatus) {
                 //  入账流水状态为空，需查询是否已初始化
@@ -117,7 +127,7 @@
                         payConfirm(accdtl);
                     } else if (TradeDict.DTL_STATUS_SUCCESS.equals(queryResult.getStatus())) {
                         //  查询得到状态为success，记录下状态
-                        userDataService.updateAccamount(accdtl.getCitizenCardno(), accdtl.getAmount());
+                        userDataService.updateAccamount(accdtl.getCitizenCardno(), accdtl.getActualamount());
                         cofirmAcc(queryResult.getStatus(), accdtl.getBillno(), accdtl.getRefno());
                     } else if (TradeDict.DTL_STATUS_FAIL.equals(queryResult.getStatus())) {
                         cofirmAcc(queryResult.getStatus(), accdtl.getBillno(), accdtl.getRefno());
@@ -165,6 +175,7 @@
         accdtl.setCitizenCardno(collectdtl.getCitizenCardno());
         accdtl.setMode(TradeDict.PAY_MODE_CARD);//TODO: 二维码消费
         accdtl.setAmount(collectdtl.getAmount());
+        accdtl.setActualamount(collectdtl.getActualamount());
         accdtl.setWaterSumHundredLitre(collectdtl.getWaterSumHundredLitre());
         accdtl.setCardPhyId(collectdtl.getCardPhyId());
         accdtl.setTransTime(collectdtl.getTransTime());
@@ -176,7 +187,7 @@
         CitizenCardPayinitParam initParam = new CitizenCardPayinitParam();
         initParam.setBillno(accdtl.getBillno());
         initParam.setCardNo(accdtl.getCitizenCardno());
-        initParam.setAmount(MoneyUtil.YuanToFen(accdtl.getAmount()));
+        initParam.setAmount(MoneyUtil.YuanToFen(accdtl.getActualamount()));
         initParam.setDtltype(Constants.DTLTYPE_WATER);
         initParam.setTransdate(accdtl.getTransDate());
         initParam.setTranstime(accdtl.getTransTime());
@@ -194,7 +205,7 @@
         if (finishRetcode == 0) {
             accStatus = TradeDict.DTL_STATUS_SUCCESS;
             //  更新用户已入账金额
-            userDataService.updateAccamount(initAccdtl.getCitizenCardno(), initAccdtl.getAmount());
+            userDataService.updateAccamount(initAccdtl.getCitizenCardno(), initAccdtl.getActualamount());
         } else if (finishRetcode == TradeErrorCode.WAIT_QUERY_RESULT) {
             QueryDtlResultParam queryParam = new QueryDtlResultParam();
             queryParam.setRefno(payFinish.getRefno());
@@ -203,7 +214,7 @@
                 accStatus = queryResult.getStatus();
                 if (TradeDict.DTL_STATUS_SUCCESS.equals(accStatus)) {
                     accStatus = TradeDict.DTL_STATUS_SUCCESS;
-                    userDataService.updateAccamount(initAccdtl.getCitizenCardno(), initAccdtl.getAmount());
+                    userDataService.updateAccamount(initAccdtl.getCitizenCardno(), initAccdtl.getActualamount());
                 }
             } else {
                 accStatus = TradeDict.DTL_STATUS_WIP;
diff --git a/src/main/java/com/supwisdom/dlpay/water/pojo/TAccdtlDTO.java b/src/main/java/com/supwisdom/dlpay/water/pojo/TAccdtlDTO.java
index 0c73da9..9138845 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pojo/TAccdtlDTO.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pojo/TAccdtlDTO.java
@@ -6,6 +6,7 @@
     private String devicename;
     private Integer watersumhundredlitre;
     private Double amount;
+    private Double actualamount;
     private String username;
     private String citizencardno;
     private String transdate;
@@ -145,4 +146,12 @@
     public void setRefno(String refno) {
         this.refno = refno;
     }
+
+    public Double getActualamount() {
+        return actualamount;
+    }
+
+    public void setActualamount(Double actualamount) {
+        this.actualamount = actualamount;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/pojo/TCollectdtlDTO.java b/src/main/java/com/supwisdom/dlpay/water/pojo/TCollectdtlDTO.java
index 0c4079d..f7bdb50 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pojo/TCollectdtlDTO.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pojo/TCollectdtlDTO.java
@@ -19,6 +19,8 @@
     @Column
     private Double amount;
     @Column
+    private Double actualamount;
+    @Column
     private String username;
     @Column
     private String citizencardno;
@@ -158,4 +160,12 @@
     public void setAreano(Integer areano) {
         this.areano = areano;
     }
+
+    public Double getActualamount() {
+        return actualamount;
+    }
+
+    public void setActualamount(Double actualamount) {
+        this.actualamount = actualamount;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlCountDTO.java b/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlCountDTO.java
index 44c3216..34a57d2 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlCountDTO.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlCountDTO.java
@@ -17,6 +17,8 @@
 
     private BigDecimal amount;
 
+    private BigDecimal actualamount;
+
     private BigInteger water;
 
     public String getAccdate() {
@@ -74,4 +76,12 @@
     public void setWater(BigInteger water) {
         this.water = water;
     }
+
+    public BigDecimal getActualamount() {
+        return actualamount;
+    }
+
+    public void setActualamount(BigDecimal actualamount) {
+        this.actualamount = actualamount;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlCountVO.java b/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlCountVO.java
index e338ef2..867ce38 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlCountVO.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pojo/TTransdtlCountVO.java
@@ -8,6 +8,7 @@
     private String mode;
     private Integer count;
     private Double amount;
+    private Double actualamount;
     private Integer water;
     private String devicename;
     private String areaname;
@@ -91,4 +92,12 @@
     public void setAreaname(String areaname) {
         this.areaname = areaname;
     }
+
+    public Double getActualamount() {
+        return actualamount;
+    }
+
+    public void setActualamount(Double actualamount) {
+        this.actualamount = actualamount;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/service/AccdtlService.java b/src/main/java/com/supwisdom/dlpay/water/service/AccdtlService.java
index e31d939..6acf5f6 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/AccdtlService.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/AccdtlService.java
@@ -24,4 +24,7 @@
 
     @Transactional(rollbackFor = Exception.class, readOnly = true)
     PageResult<TAccdtlDTO> queryAccdtlByParam(TransdtlSearchBean param);
+
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    TAccdtl saveAccdtl(TAccdtl accdtl);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/service/impl/AccdtlServiceImpl.java b/src/main/java/com/supwisdom/dlpay/water/service/impl/AccdtlServiceImpl.java
index 16b3a5d..3e6d042 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/impl/AccdtlServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/impl/AccdtlServiceImpl.java
@@ -121,7 +121,7 @@
 
     @Override
     public PageResult<TAccdtlDTO> queryAccdtlByParam(TransdtlSearchBean param) {
-        StringBuffer querySql = new StringBuffer("select t1.billno,t1.amount,t1.citizencardno,t1.cardphyid,t1.deviceno,t1.mode,t1.status,t1.transdate,t1.refno,t1.transtime,t1.accdate,t1.water_in_100ml watersumhundredlitre,t1.name username,t2.devicename,t2.areaname,t2.areano " +
+        StringBuffer querySql = new StringBuffer("select t1.billno,t1.amount,actualamount,t1.citizencardno,t1.cardphyid,t1.deviceno,t1.mode,t1.status,t1.transdate,t1.refno,t1.transtime,t1.accdate,t1.water_in_100ml watersumhundredlitre,t1.name username,t2.devicename,t2.areaname,t2.areano " +
                 "from (select dtl.*,person.name from tb_accentrydtl dtl left join tb_person person on dtl.userid = person.userid) t1," +
                 "(select device.deviceno,device.devicename,area.areaname,area.areano from tb_device device,tb_area area where device.areano = area.areano) t2 " +
                 "where t1.deviceno = t2.deviceno");
@@ -199,4 +199,9 @@
         BigInteger count = (BigInteger) countQuery.getSingleResult();
         return new PageResult<>(count.longValue(), list);
     }
+
+    @Override
+    public TAccdtl saveAccdtl(TAccdtl accdtl) {
+        return accdtlDao.save(accdtl);
+    }
 }
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 dfcc823..62735cd 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
@@ -304,10 +304,7 @@
                     @RequestParam("userid") userid: String?): ModelAndView {
         try {
             if (userid == null) {
-                return ModelAndView("error/500")
-                        .addObject("cobillno",cobillno)
-                        .addObject("errorMsg","用户id不能为空")
-
+                return ModelAndView("error/blank")
             }
             val userInfo = userProxy.querybycardno(QueryUserParam().apply {
                 this.userid = userid
@@ -382,7 +379,7 @@
         if (!querycodtl.uploadStatus) {
             val dtl = collectdtlService.saveDeviceDtlData(param)
             if (dtl.status == TradeDict.DTL_STATUS_WIP) {
-                userDataService.updateCoamount(dtl.citizenCardno, param.amount / 100.0)
+                userDataService.updateCoamount(dtl.citizenCardno, dtl.actualamount)
                 //  是否立即扣费
                 if (param.amount >= deviceService.getParaMapByDeviceno(param.deviceno)[WaterDeviceParam.imdDecThreshold]!!.toInt()) {
                     //  立即异步扣费
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt b/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt
index 5269151..c5c4f2b 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt
@@ -80,7 +80,9 @@
                 dtl.status = TradeDict.DTL_STATUS_SUCCESS
             }
         }
-        dtl.amount = amount / 100.0
+        dtl.amount = amount / 1000.0
+        val actualAmount = amount / 10
+        dtl.actualamount = actualAmount / 100.0
         dtl.waterSumHundredLitre = record.flowsensors
         dtl.uploadTime = record.transdate + record.transtime
         dtl.uploadStatus = true
@@ -117,7 +119,7 @@
     }
 
     override fun queryTransdtlDTOByParam(param: TransdtlSearchBean): PageResult<TCollectdtlDTO>? {
-        val sql = StringBuffer("select t1.cobillno,t1.amount,t1.citizencardno,t1.cardphyid,t1.deviceno,t1.mode,t1.status,t1.transdate,t1.entryno,t1.transtime,t1.accdate,t1.water_in_100ml water_sum_hundred_litre,t1.name username,t2.devicename,t2.areaname,t2.areano  " +
+        val sql = StringBuffer("select t1.cobillno,t1.amount,t1.actualamount,t1.citizencardno,t1.cardphyid,t1.deviceno,t1.mode,t1.status,t1.transdate,t1.entryno,t1.transtime,t1.accdate,t1.water_in_100ml water_sum_hundred_litre,t1.name username,t2.devicename,t2.areaname,t2.areano  " +
                 "from (select dtl.*,person.name from tb_collectdtl dtl left join tb_person person on dtl.userid = person.userid) t1," +
                 "(select device.deviceno,device.devicename,area.areaname,area.areano from tb_device device,tb_area area where device.areano = area.areano) t2 " +
                 "where t1.deviceno = t2.deviceno")
@@ -284,8 +286,8 @@
         }
         val count = daysBetween(dtlcountDate.countdate, currentDate)
         var accdate = dtlcountDate.countdate
-        val querySql = "select t3.deviceno,t3.areano,coalesce(t4.accdate,:accdate) accdate,t4.mode,coalesce(t4.amount,0) amount,coalesce(t4.water,0) water,coalesce(t4.count,0) " +
-                "count from tb_device t3 LEFT JOIN (select t1.deviceno,t1.accdate,t1.mode,t1.amount,t1.water,t1.count,t2.areano from (select deviceno,accdate,mode,sum(cast(amount as DECIMAL(18,2))) amount,sum(water_in_100ml) water,count(cobillno) count " +
+        val querySql = "select t3.deviceno,t3.areano,coalesce(t4.accdate,:accdate) accdate,t4.mode,coalesce(t4.amount,0) amount,coalesce(t4.actualamount,0) actualamount,coalesce(t4.water,0) water,coalesce(t4.count,0) " +
+                "count from tb_device t3 LEFT JOIN (select t1.deviceno,t1.accdate,t1.mode,t1.amount,t1.actualamount,t1.water,t1.count,t2.areano from (select deviceno,accdate,mode,sum(cast(amount as DECIMAL(18,3))) amount,sum(cast(actualamount as DECIMAL(18,2))) actualamount,sum(water_in_100ml) water,count(cobillno) count " +
                 "from tb_collectdtl where accdate=:accdate and status = 'success' group by deviceno,mode,accdate) t1 LEFT JOIN " +
                 "(select deviceno,areano from tb_device) t2 on t1.deviceno=t2.deviceno) t4 on t3.deviceno=t4.deviceno"
         for (i in 1..count) {
@@ -306,6 +308,7 @@
                 val transCount = TTransdtlCount()
                 transCount.accdate = it.accdate
                 transCount.amount = it.amount.toDouble()
+                transCount.actualamount = it.actualamount.toDouble()
                 transCount.water = it.water.toInt()
                 transCount.count = it.count.toInt()
                 transCount.mode = it.mode
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index befb6ca..c2749b3 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -65,7 +65,7 @@
 
 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 ('feeamount', 1, '100', '1', '单位扣费金额(单位:厘)', '10', 'N');
 INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('waittime', 1, '180', '5', '出水等待时间(单位:秒):超出这个时间，自动关闭水阀门', '90', 'N');
 INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('app_water_limit', 1, '9999', '1', 'app单次用水上限(单位:百毫升)', '200', 'N');
 INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('amount_limit', 1, '9999', '1', '单次消费金额上限(单位:分)', '500', 'N');
diff --git a/src/main/resources/templates/error/blank.html b/src/main/resources/templates/error/blank.html
new file mode 100644
index 0000000..566549b
--- /dev/null
+++ b/src/main/resources/templates/error/blank.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/templates/system/accdtl/index.html b/src/main/resources/templates/system/accdtl/index.html
index 4675e26..ef8d6fc 100644
--- a/src/main/resources/templates/system/accdtl/index.html
+++ b/src/main/resources/templates/system/accdtl/index.html
@@ -128,6 +128,7 @@
                     {field: 'areaname', align: 'center', title: '区域'},
                     {field: 'watersumhundredlitre', align: 'center', title: '用水量'},
                     {field: 'amount', align: 'center', title: '金额'},
+                    {field: 'actualamount', align: 'center', title: '实际扣费金额'},
                     {field: 'username', align: 'center', title: '姓名'},
                     {field: 'citizencardno', align: 'center', title: '卡号'},
                     {field: 'cardphyid', align: 'center', title: '物理卡号'},
diff --git a/src/main/resources/templates/system/collectdtl/index.html b/src/main/resources/templates/system/collectdtl/index.html
index 6377f91..a82dc66 100644
--- a/src/main/resources/templates/system/collectdtl/index.html
+++ b/src/main/resources/templates/system/collectdtl/index.html
@@ -135,6 +135,7 @@
                     {field: 'areaname', align: 'center', title: '区域'},
                     {field: 'waterSumHundredLitre', align: 'center', title: '用水量'},
                     {field: 'amount', align: 'center', title: '金额'},
+                    {field: 'actualamount', align: 'center', title: '实际扣费金额'},
                     {field: 'username', align: 'center', title: '姓名'},
                     {field: 'citizencardno', align: 'center', title: '卡号'},
                     {field: 'cardphyid', align: 'center', title: '物理卡号'},
diff --git a/src/main/resources/templates/system/dtlcount/index.html b/src/main/resources/templates/system/dtlcount/index.html
index 89a7fbe..684d881 100644
--- a/src/main/resources/templates/system/dtlcount/index.html
+++ b/src/main/resources/templates/system/dtlcount/index.html
@@ -116,6 +116,7 @@
                     }},
                     {field: 'water', align: 'center', title: '用水量', width: 85},
                     {field: 'amount', align: 'center', title: '金额', width: 75},
+                    {field: 'actualamount', align: 'center', title: '实际扣费金额', width: 75},
                     {
                         field: 'accdate',
                         align: 'center',
