diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 7a4735f..daab12a 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -19,5 +19,5 @@
 jwt.expiration=3600
 auth.password.bcrypt.seed=
 spring.jackson.serialization.fail-on-empty-beans=false
-payapi.url=https://yy.dlsmk.cn/payapi
+payapi.url=http://localhost:8080/payapi
 
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/Constants.java b/src/main/java/com/supwisdom/dlpay/framework/util/Constants.java
index a8c7a22..85b75ac 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/Constants.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/Constants.java
@@ -17,4 +17,7 @@
   public final static String DEVICE_STATUS_CLOSED = "2";
   public final static String MONITOR_SUBAPP_WATER = "water";
   public final static int MONITOR_SUCCESS_CODE = 200;
+
+  public final static int YES = 1;
+  public final static int NO = 0;
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java b/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
index 92b9616..dc66622 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
@@ -92,12 +92,17 @@
   public static final String PAYTYPE_RECHARGE_SERVICEFEE = "servicefee"; //收服务费
 
   /**
-   * reverse flag
+   * reverse type
    * - none : 无
-   * - cancel : 冲正
-   * - reverse : 手工撤销
+   * - refund : 冲正
    */
-  public static final String REVERSE_FLAG_NONE = "none";
-  public static final String REVERSE_FLAG_CANCEL = "cancel";
-  public static final String REVERSE_FLAG_REVERSE = "reverse";
+  public static final String REVERSE_TYPE_NONE = "none";
+  public static final String REVERSE_TYPE_REFUND = "refund";
+
+  /**
+   * payapi响应代码
+   */
+  public final static Integer PAYAPI_SUCCESS_RETCODE = 0;
+  public final static Integer PAYAPI_WAIT_QUERY = 55555;
+  public final static Integer PAYAPI_DEAL_ERROR = 30000;
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/bean/ReverseRequestBean.java b/src/main/java/com/supwisdom/dlpay/water/bean/ReverseRequestBean.java
new file mode 100644
index 0000000..234b752
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/water/bean/ReverseRequestBean.java
@@ -0,0 +1,22 @@
+package com.supwisdom.dlpay.water.bean;
+
+public class ReverseRequestBean {
+  private int cobillno;
+  private String reason;
+
+  public int getCobillno() {
+    return cobillno;
+  }
+
+  public void setCobillno(int cobillno) {
+    this.cobillno = cobillno;
+  }
+
+  public String getReason() {
+    return reason;
+  }
+
+  public void setReason(String reason) {
+    this.reason = reason;
+  }
+}
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 32c26d2..67bedae 100644
--- a/src/main/java/com/supwisdom/dlpay/water/domain/TAccdtl.java
+++ b/src/main/java/com/supwisdom/dlpay/water/domain/TAccdtl.java
@@ -56,6 +56,18 @@
     @Column(name = "refno", length = 32)
     private String refno;
 
+    @Column(name = "reversebillno", length = 32)
+    private String reversebillno;
+
+    @Column(name = "reversetype")
+    private String reversetype;
+
+    @Column(name = "reverseflag")
+    private Integer reverseflag;
+
+    @Column(name = "remark",length = 100)
+    private String remark;
+
     /**
      * 是否已更新用户入账金额
      */
@@ -182,4 +194,36 @@
     public void setUpdatedacc(Boolean updatedacc) {
         this.updatedacc = updatedacc;
     }
+
+    public String getReversebillno() {
+        return reversebillno;
+    }
+
+    public void setReversebillno(String reversebillno) {
+        this.reversebillno = reversebillno;
+    }
+
+    public String getReversetype() {
+        return reversetype;
+    }
+
+    public void setReversetype(String reversetype) {
+        this.reversetype = reversetype;
+    }
+
+    public Integer getReverseflag() {
+        return reverseflag;
+    }
+
+    public void setReverseflag(Integer reverseflag) {
+        this.reverseflag = reverseflag;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
 }
\ 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 adf0f38..834b260 100644
--- a/src/main/java/com/supwisdom/dlpay/water/domain/TCollectdtl.java
+++ b/src/main/java/com/supwisdom/dlpay/water/domain/TCollectdtl.java
@@ -76,6 +76,9 @@
   @Column(name = "nextcredittime",length = 14)
   private String nextCreditTime;
 
+  @Column(name = "reverseflag")
+  private Integer reverseflag;
+
   public String getCardPhyId() {
     return cardPhyId;
   }
@@ -227,4 +230,12 @@
   public void setActualamount(Double actualamount) {
     this.actualamount = actualamount;
   }
+
+  public Integer getReverseflag() {
+    return reverseflag;
+  }
+
+  public void setReverseflag(Integer reverseflag) {
+    this.reverseflag = reverseflag;
+  }
 }
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 8d00a27..ef4d69d 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
@@ -180,6 +180,9 @@
         accdtl.setCardPhyId(collectdtl.getCardPhyId());
         accdtl.setTransTime(collectdtl.getTransTime());
         accdtl.setTransDate(collectdtl.getTransDate());
+        accdtl.setStatus(TradeDict.DTL_STATUS_INIT);
+        accdtl.setReverseflag(Constants.NO);
+        accdtl.setReversetype(TradeDict.REVERSE_TYPE_NONE);
         return accdtl;
     }
 
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 9138845..3f68379 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pojo/TAccdtlDTO.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pojo/TAccdtlDTO.java
@@ -18,6 +18,9 @@
     private String cardphyid;
     private String accdate;
     private String refno;
+    private Integer reverseflag;
+    private String reversetype;
+    private String reversebillno;
 
     public String getTranstime() {
         return transtime;
@@ -154,4 +157,28 @@
     public void setActualamount(Double actualamount) {
         this.actualamount = actualamount;
     }
+
+    public Integer getReverseflag() {
+        return reverseflag;
+    }
+
+    public void setReverseflag(Integer reverseflag) {
+        this.reverseflag = reverseflag;
+    }
+
+    public String getReversetype() {
+        return reversetype;
+    }
+
+    public void setReversetype(String reversetype) {
+        this.reversetype = reversetype;
+    }
+
+    public String getReversebillno() {
+        return reversebillno;
+    }
+
+    public void setReversebillno(String reversebillno) {
+        this.reversebillno = reversebillno;
+    }
 }
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 f7bdb50..22c315f 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pojo/TCollectdtlDTO.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pojo/TCollectdtlDTO.java
@@ -40,6 +40,8 @@
     private String accdate;
     @Column
     private String entryno;
+    @Column
+    private Integer reverseflag;
 
     public String getEntryno() {
         return entryno;
@@ -168,4 +170,12 @@
     public void setActualamount(Double actualamount) {
         this.actualamount = actualamount;
     }
+
+    public Integer getReverseflag() {
+        return reverseflag;
+    }
+
+    public void setReverseflag(Integer reverseflag) {
+        this.reverseflag = reverseflag;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java b/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java
index 09b2e30..0fdfbcb 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java
@@ -4,7 +4,9 @@
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.water.StartWaterRequest;
 import com.supwisdom.dlpay.water.UploadRecordRequest;
+import com.supwisdom.dlpay.water.bean.ReverseRequestBean;
 import com.supwisdom.dlpay.water.bean.TransdtlCountSearchBean;
+import com.supwisdom.dlpay.water.domain.TAccdtl;
 import com.supwisdom.dlpay.water.domain.TCollectdtl;
 import com.supwisdom.dlpay.water.pojo.TCollectdtlDTO;
 import com.supwisdom.dlpay.water.bean.TransdtlSearchBean;
@@ -33,6 +35,9 @@
     @Transactional(rollbackFor = Exception.class)
     PageResult<TCollectdtlDTO> queryTransdtlDTOByParam(TransdtlSearchBean param);
 
+    @Transactional(rollbackFor = Exception.class)
+    TAccdtl reverseCollectDtl(ReverseRequestBean bean);
+
     @Transactional(rollbackFor = Exception.class,readOnly = true)
     PageResult<TTransdtlCountVO> queryTransdtlCountByParam(TransdtlCountSearchBean param);
 
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 3e6d042..516ca11 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,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 " +
+        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,t1.reversetype,t1.reverseflag,t1.reversebillno,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");
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 4d940f9..4d6b2f8 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
@@ -171,6 +171,7 @@
                 status = TradeDict.DTL_STATUS_INIT
                 authStatus = true
                 uploadStatus = false
+                reverseflag = Constants.NO
             }
             val savedTrans = collectdtlService.createNewTransdtl(trans)
             //4. 将流水 cobillno 和费率信息返回给终端
@@ -205,6 +206,7 @@
                 status = TradeDict.DTL_STATUS_INIT
                 authStatus = false
                 uploadStatus = false
+                reverseflag = Constants.NO
             }
             val savedTrans = collectdtlService.createNewTransdtl(trans)
             //2.将流水号及认证地址返回给终端
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 09c06ca..a0c9716 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
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.water.controller
 
 import com.supwisdom.dlpay.api.bean.JsonResult
+import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
 import com.supwisdom.dlpay.framework.util.*
 import com.supwisdom.dlpay.system.service.UserDataService
@@ -10,11 +11,13 @@
 import com.supwisdom.dlpay.water.domain.*
 import com.supwisdom.dlpay.water.pojo.*
 import com.supwisdom.dlpay.water.service.*
+import mu.KotlinLogging
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
 import org.springframework.stereotype.Controller
 import org.springframework.ui.Model
 import org.springframework.web.bind.annotation.*
+import java.lang.reflect.UndeclaredThrowableException
 
 @Controller
 class RegionController {
@@ -359,9 +362,14 @@
     @Autowired
     private lateinit var collectdtlService: CollectdtlService
 
+    private val logger = KotlinLogging.logger { }
+
     @GetMapping("/collectdtl/index")
     fun dtlIndexView() = "system/collectdtl/index"
 
+    @GetMapping("/collectdtl/reverse")
+    fun loadReverse() = "system/collectdtl/reverse"
+
     @GetMapping("/collectdtl/list")
     @ResponseBody
     fun queryTransdtl(@RequestParam("devicename", required = false) devicename: String,
@@ -407,6 +415,32 @@
         }
     }
 
+    @PostMapping("/collectdtl/reverse")
+    @ResponseBody
+    fun reverseCollectDtl(@RequestBody bean: ReverseRequestBean): ResponseEntity<Any> {
+        try {
+            if (bean.cobillno == 0 || bean.reason.isNullOrEmpty()) {
+                return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(TradeErrorCode.INPUT_DATA_ERROR, "请求参数不能为空"))
+            }
+            val refundAccdtl = collectdtlService.reverseCollectDtl(bean)
+            if (refundAccdtl.status == TradeDict.DTL_STATUS_SUCCESS) {
+                return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .success("冲正成功"))
+            }
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(WaterErrorCode.PROCESS_ERROR,"冲正失败，请稍后重试"))
+        } catch (ex: Exception) {
+            logger.error("系统异常",ex)
+            if (ex is UndeclaredThrowableException) {
+                return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .exception(WaterErrorCode.PROCESS_ERROR, ex, ex.undeclaredThrowable.message))
+            }
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .exception(WaterErrorCode.PROCESS_ERROR, ex, "服务器异常,请稍后再试"))
+        }
+    }
+
     @GetMapping("/dtlcount/index")
     fun dtlCountIndexView() = "system/dtlcount/index"
 
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 c5c4f2b..b10d7ad 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
@@ -1,19 +1,25 @@
 package com.supwisdom.dlpay.water.service
 
+import com.supwisdom.dlpay.api.bean.ConsumePayCancelParam
+import com.supwisdom.dlpay.api.bean.QueryDtlResultParam
 import com.supwisdom.dlpay.api.bean.UserInforResponse
 import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.service.BusinessparaService
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.*
+import com.supwisdom.dlpay.paysdk.proxy.TransactionProxy
 import com.supwisdom.dlpay.water.StartWaterRequest
 import com.supwisdom.dlpay.water.UploadRecordRequest
+import com.supwisdom.dlpay.water.bean.ReverseRequestBean
 import com.supwisdom.dlpay.water.bean.TransdtlCountSearchBean
 import com.supwisdom.dlpay.water.dao.CollectdtlDao
 import com.supwisdom.dlpay.water.domain.TCollectdtl
 import com.supwisdom.dlpay.water.pojo.TCollectdtlDTO
 import com.supwisdom.dlpay.water.bean.TransdtlSearchBean
+import com.supwisdom.dlpay.water.dao.AccdtlDao
 import com.supwisdom.dlpay.water.dao.DtlCountDateDao
 import com.supwisdom.dlpay.water.dao.TransdtlCountDao
+import com.supwisdom.dlpay.water.domain.TAccdtl
 import com.supwisdom.dlpay.water.domain.TTransdtlCount
 import com.supwisdom.dlpay.water.domain.TdtlCountDate
 import com.supwisdom.dlpay.water.pojo.TTransdtlCountDTO
@@ -40,6 +46,9 @@
     private lateinit var collectdtlDao: CollectdtlDao
 
     @Autowired
+    private lateinit var accdtlDao: AccdtlDao
+
+    @Autowired
     private lateinit var em: EntityManager
 
     @Autowired
@@ -57,6 +66,9 @@
     @Autowired
     private lateinit var systemUtilService: SystemUtilService
 
+    @Autowired
+    private lateinit var transactionProxy: TransactionProxy
+
 
     override fun createNewTransdtl(dtl: TCollectdtl): TCollectdtl {
         collectdtlDao.save(dtl)
@@ -76,7 +88,7 @@
                 dtl.lastCredit = dateTime.hostdate + "0" // 0代表已尝试入账次数
                 dtl.nextCreditTime = dateTime.hostdatetime
                 dtl.status = TradeDict.DTL_STATUS_WIP
-            }else{
+            } else {
                 dtl.status = TradeDict.DTL_STATUS_SUCCESS
             }
         }
@@ -119,7 +131,7 @@
     }
 
     override fun queryTransdtlDTOByParam(param: TransdtlSearchBean): PageResult<TCollectdtlDTO>? {
-        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  " +
+        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,t1.reverseflag,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")
@@ -217,6 +229,104 @@
         return result
     }
 
+    override fun reverseCollectDtl(bean: ReverseRequestBean?): TAccdtl {
+        val collectdtl = collectdtlDao.findByCobillnoForUpdate(bean!!.cobillno)
+                ?: throw TransactionProcessException(WaterErrorCode.DATA_NOTFOUND_ERROR,
+                        "采集流水号不存在")
+        if (collectdtl.status != TradeDict.DTL_STATUS_SUCCESS || collectdtl.reverseflag == Constants.YES) {
+            throw TransactionProcessException(WaterErrorCode.DATA_NOTFOUND_ERROR,
+                    "采集流水状态异常，无法冲正")
+        }
+        if (collectdtl.actualamount == 0.0) {
+            throw TransactionProcessException(WaterErrorCode.DATA_NOTFOUND_ERROR,
+                    "采集流水实际扣费金额为0，无法冲正")
+        }
+        val accdtl = accdtlDao.findByBillno(collectdtl.entryno)
+                ?: throw TransactionProcessException(WaterErrorCode.DATA_NOTFOUND_ERROR,
+                        "入账流水未找到")
+        if (accdtl.status != TradeDict.DTL_STATUS_SUCCESS
+                || accdtl.reverseflag == Constants.YES
+                || accdtl.reversetype == TradeDict.REVERSE_TYPE_REFUND) {
+            throw TransactionProcessException(WaterErrorCode.DATA_NOTFOUND_ERROR,
+                    "入账流水状态异常")
+        }
+        // 创建一条新的冲正流水
+        val datetime = systemUtilService.sysdatetime
+        val refundAccdtl = TAccdtl().apply {
+            this.billno = systemUtilService.refno
+            this.amount = -accdtl.amount
+            this.cardPhyId = accdtl.cardPhyId
+            this.citizenCardno = accdtl.citizenCardno
+            this.status = TradeDict.DTL_STATUS_INIT
+            this.transDate = datetime.hostdate
+            this.transTime = datetime.hosttime
+            this.userid = accdtl.userid
+            this.actualamount = -accdtl.actualamount
+            this.reversebillno = accdtl.billno
+            this.reversetype = TradeDict.REVERSE_TYPE_REFUND
+            this.remark = bean.reason
+            this.mode = accdtl.mode
+            this.deviceno = accdtl.deviceno
+            this.reverseflag = Constants.NO
+        }
+        accdtlDao.save(refundAccdtl)
+        val payCancel = transactionProxy.payCancel(ConsumePayCancelParam().apply {
+            this.refno = accdtl.refno
+            this.requestbillno = refundAccdtl.billno
+            this.transdate = datetime.hostdate
+            this.transtime = datetime.hosttime
+        })
+        when (payCancel.retcode) {
+            TradeDict.PAYAPI_SUCCESS_RETCODE -> {
+                refundAccdtl.status = TradeDict.DTL_STATUS_SUCCESS
+                refundAccdtl.refno = payCancel.refno
+                refundAccdtl.accdate = datetime.hostdate
+                accdtlDao.save(refundAccdtl)
+                // 修改采集流水和入账流水的冲正状态
+                collectdtl.reverseflag = Constants.YES
+                collectdtlDao.save(collectdtl)
+
+                accdtl.reverseflag = Constants.YES
+                return accdtlDao.save(accdtl)
+            }
+            TradeDict.PAYAPI_WAIT_QUERY -> {
+                val queryResult = transactionProxy.queryDtlResult(QueryDtlResultParam().apply {
+                    this.refno = payCancel.refno
+                })
+                when (queryResult.retcode) {
+                    TradeDict.PAYAPI_SUCCESS_RETCODE -> {
+                        refundAccdtl.status = TradeDict.DTL_STATUS_SUCCESS
+                        refundAccdtl.refno = payCancel.refno
+                        refundAccdtl.accdate = datetime.hostdate
+                        accdtlDao.save(refundAccdtl)
+                        // 修改采集流水和入账流水的冲正状态
+                        collectdtl.reverseflag = Constants.YES
+                        collectdtlDao.save(collectdtl)
+
+                        accdtl.reverseflag = Constants.YES
+                        return accdtlDao.save(accdtl)
+                    }
+                    TradeDict.PAYAPI_DEAL_ERROR -> {
+                        logger.error("向payapi退费失败:[${queryResult.retmsg}]")
+                    }
+                    else -> {
+                        logger.error("未知的退费状态码:${queryResult.retcode},${queryResult.retmsg}")
+                    }
+                }
+                refundAccdtl.status = TradeDict.DTL_STATUS_FAIL
+                return accdtlDao.save(refundAccdtl)
+            }
+            TradeDict.PAYAPI_DEAL_ERROR -> {
+                logger.error("向payapi退费失败:[${payCancel.retmsg}]")
+                refundAccdtl.status = TradeDict.DTL_STATUS_FAIL
+                return accdtlDao.save(refundAccdtl)
+            }
+        }
+        logger.error("未知的退费状态码:${payCancel.retcode},${payCancel.retmsg}")
+        refundAccdtl.status = TradeDict.DTL_STATUS_FAIL
+        return accdtlDao.save(refundAccdtl)
+    }
+
     override fun queryTransdtlCountByParam(param: TransdtlCountSearchBean): PageResult<TTransdtlCountVO> {
         val querySql = StringBuffer("select t1.*,t2.devicename,t2.areaname from (select * from tb_transdtl_count) t1 left join " +
                 "(select device.deviceno,device.devicename,area.areaname from tb_device device left join tb_area area on device.areano = area.areano) t2 " +
@@ -270,11 +380,12 @@
         val dateTime = systemUtilsService.sysdatetime
         val date = dateTime.hostdate
         val time = dateTime.hostdatetime
-        return collectdtlDao.findWipCollectdtl(date + count,time,PageRequest.of(0, 10))
+        return collectdtlDao.findWipCollectdtl(date + count, time, PageRequest.of(0, 10))
     }
 
     override fun findByCobillnoForUpdate(cobillno: Int?): TCollectdtl {
-        return collectdtlDao.findByCobillnoForUpdate(cobillno) ?: throw RuntimeException("采集流水号:" + cobillno + "未找到")
+        return collectdtlDao.findByCobillnoForUpdate(cobillno)
+                ?: throw RuntimeException("采集流水号:" + cobillno + "未找到")
     }
 
     override fun generateCountdtl() {
@@ -288,14 +399,14 @@
         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.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 " +
+                "from tb_collectdtl where accdate=:accdate and status = 'success' and (reverseflag <>1 or reverseflag ISNULL) 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) {
             if (accdate.toInt() >= currentDate.toInt()) {
                 logger.error { "统计流水日期<$accdate>应小于当前日期<$currentDate>" }
                 return
             }
-            if (transdtlCountDao.countByAccdate(accdate)>0) {
+            if (transdtlCountDao.countByAccdate(accdate) > 0) {
                 logger.error { accdate + "的统计流水已生成!" }
                 return
             }
@@ -319,7 +430,7 @@
             transdtlCountDao.saveAll(list)
             accdate = nextDay(accdate)
         }
-        dtlcountDate.countdate=accdate
+        dtlcountDate.countdate = accdate
         dtlCountDateDao.save(dtlcountDate)
     }
 
@@ -352,15 +463,15 @@
         }
     }
 
-    override fun getTodayAmount(userid:String): Double? {
+    override fun getTodayAmount(userid: String): Double? {
         val sql = "select sum(amount) from tb_collectdtl where status in ('wip','success') and userid=:userid and transdate=:date"
         val query = em.createNativeQuery(sql)
-        query.setParameter("userid",userid)
-        query.setParameter("date",systemUtilsService.sysdatetime.hostdate)
+        query.setParameter("userid", userid)
+        query.setParameter("date", systemUtilsService.sysdatetime.hostdate)
         return query.singleResult as Double?
     }
 
-    override fun saveCollectDtl(dtl: TCollectdtl): TCollectdtl?{
+    override fun saveCollectDtl(dtl: TCollectdtl): TCollectdtl? {
         return collectdtlDao.save(dtl)
     }
 }
\ 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 ef8d6fc..f5a091a 100644
--- a/src/main/resources/templates/system/accdtl/index.html
+++ b/src/main/resources/templates/system/accdtl/index.html
@@ -122,47 +122,35 @@
             page: true,
             cols: [
                 [
-                    {field: 'billno', align: 'center', title: '流水号'},
-                    {field: 'deviceno', align: 'center', title: '设备号'},
-                    {field: 'devicename', align: 'center', title: '设备名称'},
-                    {field: 'areaname', align: 'center', title: '区域'},
-                    {field: 'watersumhundredlitre', align: 'center', title: '用水量'},
-                    {field: 'amount', align: 'center', title: '金额'},
-                    {field: 'actualamount', align: 'center', title: '实际扣费金额'},
-                    {field: 'username', align: 'center', title: '姓名'},
-                    {field: 'citizencardno', align: 'center', title: '卡号'},
-                    {field: 'cardphyid', align: 'center', title: '物理卡号'},
-                    {field: 'accdate', align: 'center', title: '入账日期',
-                    templet:function (item) {
-                        return formatDate(item.accdate)
-                    }},
-                    {field: 'refno', align: 'center', title: '支付中心流水'},
+                    {field: 'billno', align: 'center', title: '流水号', width: 200},
+                    {field: 'username', align: 'center', title: '姓名', width: 90},
+                    {field: 'citizencardno', align: 'center', title: '卡号', width: 95},
                     {
                         field: 'transdate',
                         align: 'center',
                         title: '采集时间',
+                        width: 105,
                         templet: function (item) {
                             return formatDate(item.transdate)
                         }
                     },
                     {
-                        field: 'transtype',
+                        field: 'reversetype',
                         align: 'center',
-                        title: '支付方式',
+                        title: '流水类型',
+                        width: 90,
                         templet: function (item) {
-                            if (item.mode === 'qrcode') {
-                                return '扫码'
-                            } else if (item.mode === 'card') {
-                                return '市民卡'
-                            } else {
-                                return item.mode
+                            if (item.reversetype === 'refund') {
+                                return '冲正流水'
                             }
+                            return '消费流水'
                         }
                     },
                     {
                         field: 'transStatus',
                         align: 'center',
                         title: '状态',
+                        width: 90,
                         templet: function (item) {
                             if (item.status === 'init') {
                                 return '初始化'
@@ -173,7 +161,47 @@
                             } else if (item.status === 'success') {
                                 return '成功';
                             } else {
-                                return item.status
+                                return '-'
+                            }
+                        }
+                    },
+                    {field: 'amount', align: 'center', title: '金额', width: 80},
+                    {field: 'actualamount', align: 'center', title: '实际扣费金额', width: 120},
+                    {
+                        field: 'reverseflag',
+                        align: 'center',
+                        title: '冲正状态',
+                        width: 90,
+                        templet: function (item) {
+                            if (item.reverseflag === 1) {
+                                return '已冲正'
+                            }
+                            return '-'
+                        }
+                    },
+                    {field: 'accdate', align: 'center', title: '入账日期', width: 105,
+                        templet:function (item) {
+                            return formatDate(item.accdate)
+                        }},
+                    {field: 'refno', align: 'center', title: '支付中心流水', width: 200},
+                    {field: 'reversebillno', align: 'center', title: '被退款流水号', width: 200},
+                    {field: 'deviceno', align: 'center', title: '设备号', width: 95},
+                    {field: 'devicename', align: 'center', title: '设备名称', width: 200},
+                    {field: 'areaname', align: 'center', title: '区域', width: 200},
+                    {field: 'watersumhundredlitre', align: 'center', title: '用水量', width: 80},
+                    {field: 'cardphyid', align: 'center', title: '物理卡号', width: 100},
+                    {
+                        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
                             }
                         }
                     }
diff --git a/src/main/resources/templates/system/collectdtl/index.html b/src/main/resources/templates/system/collectdtl/index.html
index a82dc66..d4c8ba1 100644
--- a/src/main/resources/templates/system/collectdtl/index.html
+++ b/src/main/resources/templates/system/collectdtl/index.html
@@ -114,7 +114,7 @@
             }
         });
         // 渲染表格
-        table.render({
+        let collectDtlTable = table.render({
             elem: '#watercollectdtltable',
             url: '[[@{/collectdtl/list}]]',
             where: {
@@ -129,48 +129,23 @@
             page: true,
             cols: [
                 [
-                    {field: 'cobillno', align: 'center', title: '流水号'},
-                    {field: 'deviceno', align: 'center', title: '设备号'},
-                    {field: 'devicename', align: 'center', title: '设备名称'},
-                    {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: '物理卡号'},
-                    {field: 'accdate', align: 'center', title: '入账日期',
-                    templet:function (item) {
-                        return formatDate(item.accdate)
-                    }
-                    },
-                    {field: 'entryno', align: 'center', title: '入账流水号'},
+                    {field: 'cobillno', align: 'center', title: '流水号', width: 80},
+                    {field: 'username', align: 'center', title: '姓名', width: 90},
+                    {field: 'citizencardno', align: 'center', title: '卡号', width: 95},
                     {
                         field: 'transdate',
                         align: 'center',
                         title: '采集时间',
+                        width: 105,
                         templet: function (item) {
                             return formatDate(item.transdate)
                         }
                     },
                     {
-                        field: 'transtype',
-                        align: 'center',
-                        title: '支付方式',
-                        templet: function (item) {
-                            if (item.mode === 'qrcode') {
-                                return '扫码'
-                            } else if (item.mode === 'card') {
-                                return '市民卡'
-                            } else {
-                                return item.mode
-                            }
-                        }
-                    },
-                    {
                         field: 'transStatus',
                         align: 'center',
                         title: '状态',
+                        width: 90,
                         templet: function (item) {
                             if (item.status === 'init') {
                                 return '初始化'
@@ -184,11 +159,86 @@
                                 return item.status
                             }
                         }
+                    },
+                    {
+                        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: 'amount', align: 'center', title: '金额', width: 80},
+                    {field: 'actualamount', align: 'center', title: '实际扣费金额', width: 120},
+                    {
+                        field: 'reverseflag',
+                        align: 'center',
+                        title: '冲正状态',
+                        width: 90,
+                        templet: function (item) {
+                            if (item.reverseflag === 1) {
+                                return '已冲正'
+                            }
+                            return '-'
+                        }
+                    },
+                    {field: 'deviceno', align: 'center', title: '设备号', width: 95},
+                    {field: 'devicename', align: 'center', title: '设备名称', width: 200},
+                    {field: 'areaname', align: 'center', title: '区域', width: 200},
+                    {field: 'waterSumHundredLitre', align: 'center', title: '用水量', width: 80},
+                    {field: 'cardphyid', align: 'center', title: '物理卡号', width: 100},
+                    {field: 'entryno', align: 'center', title: '入账流水号', width: 200},
+                    {field: 'accdate', align: 'center', title: '入账日期', width: 105,
+                    templet:function (item) {
+                        return formatDate(item.accdate)
+                    }
+                    },
+                    {
+                        field: 'oper',
+                        fixed: 'right',
+                        align: 'center',
+                        title: '操作',
+                        width: 85,
+                        templet: function (item) {
+                            var html;
+                            if (item.status === 'success' && item.reverseflag !== 1 && item.actualamount !== 0) {
+                                html = ' <a class="layui-btn  layui-btn-xs" lay-event="reverse"><i class="layui-icon layui-icon-edit"></i>冲正</a> ';
+                            } else {
+                                html = ' <a class="layui-btn  layui-btn-xs layui-btn-disabled"><i class="layui-icon layui-icon-edit"></i>冲正</a> ';
+                            }
+                            return html;
+                        }
                     }
                 ]
             ]
         });
-
+        table.on('tool(watercollectdtltable)', function (obj) {
+            let data = obj.data;
+            let layEvent = obj.event;
+            if (layEvent === 'reverse') {
+                showReverse(data);
+            }
+        });
+        let showReverse = function (data) {
+            if (data) {
+                admin.putTempData('t_func', data);
+            }
+            admin.popupCenter({
+                title: "冲正流水",
+                path: '[[@{/collectdtl/reverse}]]',
+                //  重新渲染表格
+                finish: function () {
+                    searchCollectDtl(collectDtlTable.config.page.curr);
+                }
+            });
+        };
         //  未入账开关选择
         var notacc;
         form.on('switch(watercollectdtl-notacc-switch)', function (data) {
@@ -205,6 +255,9 @@
         });
         // 搜索按钮点击事件
         $('#btn-search-watercollectdtl').click(function () {
+            searchCollectDtl(1)
+        });
+        function searchCollectDtl(page) {
             var devicename = $('#watercollectdtl-devicename-search-value').val().trim();
             var deviceno = $('#watercollectdtl-deviceno-search-value').val().trim();
             var areano = $('#watercollectdtl-select-region').val();
@@ -223,13 +276,13 @@
                 },
                 url: "[[@{/collectdtl/list}]]",
                 page: {
-                    curr: 1
+                    curr: page
                 },
                 text: {
                     none: '没有符合查询条件的流水'
                 }
             });
-        });
+        }
     });
     function formatDate(date){
         if (date == null) {
diff --git a/src/main/resources/templates/system/collectdtl/reverse.html b/src/main/resources/templates/system/collectdtl/reverse.html
new file mode 100644
index 0000000..bb10d47
--- /dev/null
+++ b/src/main/resources/templates/system/collectdtl/reverse.html
@@ -0,0 +1,92 @@
+<!-- operator表单弹窗 -->
+<form id="form" lay-filter="form" class="layui-form model-form">
+    <div class="layui-form-item">
+        <label class="layui-form-label">冲正流水</label>
+        <div class="layui-input-block">
+            <input name="cobillno" id="cobillno" readonly="readonly" type="text" class="layui-input"/>
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="layui-form-label">冲正对象</label>
+        <div class="layui-input-block">
+            <input name="username" id="username" readonly="readonly" type="text" class="layui-input"/>
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="layui-form-label">冲正金额</label>
+        <div class="layui-input-block">
+            <input name="actualamount" id="actualamount" readonly="readonly" type="text" class="layui-input"/>
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="layui-form-label">冲正原因</label>
+        <div class="layui-input-block">
+            <textarea name="reverse-reason" id="reverse-reason" maxlength="100"
+                      placeholder="请输入冲正原因" class="layui-textarea" lay-verify="required" required></textarea>
+        </div>
+    </div>
+    <div class="layui-form-item model-form-footer">
+        <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+        <button class="layui-btn" lay-filter="form-submit" lay-submit id="submitbtn">保存</button>
+    </div>
+</form>
+
+<script>
+    layui.use(['layer', 'admin', 'form'], function () {
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+        var reverse_form_url = '[[@{/collectdtl/reverse}]]';
+        // 回显user数据
+        var reverse_form_func = admin.getTempData('t_func');
+        //  清除admin域中的数据
+        admin.putTempData('t_func', '');
+        if (reverse_form_func) {
+            form.val('form', reverse_form_func);
+        }
+
+        // 表单提交事件
+        form.on('submit(form-submit)', function (data) {
+            layer.load(2);
+            var param = {
+                "cobillno": $('input[id="cobillno"]').val(),
+                "reason": $('textarea[id="reverse-reason"]').val()
+            };
+            let token = $("meta[name='_csrf_token']").attr("value");
+            $.ajax({
+                type: "POST",
+                dataType: "json",
+                url: reverse_form_url,
+                headers: {
+                    'Accept': 'application/json;charset=UTF-8',
+                    'Content-Type': 'application/json;charset=UTF-8',
+                    'X-CSRF-TOKEN': token,
+                },
+                data: JSON.stringify(param),
+                success: function (result) {
+                    console.log(result);
+                    layer.closeAll('loading');
+
+                    if (result.retcode == 0) {
+                        layer.msg(result.retmsg, {icon: 1});
+                        admin.finishPopupCenter();
+                    } else if (result.retcode == 401) {
+                        layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('[[@{/login}]]');
+                        }, 1000);
+                        return;
+                    } else {
+                        console.log('err:' + result.retcode);
+                        layer.msg(result.retmsg, {icon: 2});
+                    }
+                },
+                error: function () {
+                    layer.closeAll('loading');
+                    layer.msg("请求服务器失败！", {icon: 2});
+                }
+            });
+            return false;
+        });
+    });
+
+</script>
\ No newline at end of file
