diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/controller/TestAction.java b/payapi/src/main/java/com/supwisdom/dlpay/api/controller/TestAction.java
deleted file mode 100644
index 9a2d51b..0000000
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/controller/TestAction.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.supwisdom.dlpay.api.controller;
-
-import com.supwisdom.dlpay.api.bean.BaseResp;
-import com.supwisdom.dlpay.framework.data.SystemDateTime;
-import com.supwisdom.dlpay.framework.service.SystemUtilService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-@Controller //将所有方法标识@ResponseBody注解
-@RequestMapping("/test")
-public class TestAction {
-  @Autowired
-  private SystemUtilService systemUtilService;
-
-  @RequestMapping("/demo")
-  @ResponseBody
-  public BaseResp test() {
-    SystemDateTime dt = systemUtilService.getSysdatetime();
-
-    BaseResp resp = new BaseResp();
-    resp.setRetcode("0");
-    resp.setRetmsg("OK");
-    resp.setData("hostdate=["+dt.getHostdate()+"],hosttime=["+dt.getHosttime()+"],hostdatetime=["+dt.getHostdatetime()+"],date=["+dt.getSysdate()+"]");
-    return resp;
-  }
-}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/ReverseDtlDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/ReverseDtlDao.java
new file mode 100644
index 0000000..87b0e77
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/ReverseDtlDao.java
@@ -0,0 +1,13 @@
+package com.supwisdom.dlpay.api.dao;
+
+import com.supwisdom.dlpay.api.domain.TReverseDtl;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ReverseDtlDao extends JpaRepository<TReverseDtl, String> {
+
+  @Query("from TReverseDtl t where t.originRefno=?1 and t.billno=?2 ")
+  TReverseDtl findByOriginRefnoAndBillno(String originRefno, String billno);
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TReverseDtl.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TReverseDtl.java
new file mode 100644
index 0000000..93e30b3
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TReverseDtl.java
@@ -0,0 +1,140 @@
+package com.supwisdom.dlpay.api.domain;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotNull;
+
+@Entity
+@Table(name = "TB_REVERSEDTL", indexes = {@Index(name = "TB_REVERSEDTL_UK", unique = true, columnList = "originRefno, billno")})
+public class TReverseDtl {
+  @Id
+  @GenericGenerator(name = "idGenerator", strategy = "uuid")
+  @GeneratedValue(generator = "idGenerator")
+  @Column(name = "ID", nullable = false, length = 32)
+  private String id;
+
+  @Column(name = "ORIGIN_REFNO", length = 20)
+  @NotNull
+  private String originRefno; //原始流水号
+
+  @Column(name = "BILLNO", length = 20)
+  @NotNull
+  private String billno; //业务系统请求流水号
+
+  @Column(name = "TRANSDATE", length = 8)
+  @NotNull
+  private String transdate;
+
+  @Column(name = "TRANSTIME", length = 6)
+  @NotNull
+  private String transtime;
+
+  @Column(name = "REFUND_AMOUNT", precision = 9)
+  private Integer refundAmount; //退款金额
+
+  @Column(name = "REVERSE_FLAG", nullable = false, length = 10)
+  @NotNull
+  private String reverseFlag; //refund, cancel
+
+  @Column(name = "STATUS", nullable = false, length = 20)
+  @NotNull
+  private String status;
+
+  @Column(name = "REMARK", length = 600)
+  private String remark;
+
+  @Column(name = "CREATETIME", length = 14)
+  private String createtime;
+
+  @Column(name = "tenantid", length = 20)
+  private String tenantid = "";
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getOriginRefno() {
+    return originRefno;
+  }
+
+  public void setOriginRefno(String originRefno) {
+    this.originRefno = originRefno;
+  }
+
+  public String getBillno() {
+    return billno;
+  }
+
+  public void setBillno(String billno) {
+    this.billno = billno;
+  }
+
+  public String getTransdate() {
+    return transdate;
+  }
+
+  public void setTransdate(String transdate) {
+    this.transdate = transdate;
+  }
+
+  public String getTranstime() {
+    return transtime;
+  }
+
+  public void setTranstime(String transtime) {
+    this.transtime = transtime;
+  }
+
+  public Integer getRefundAmount() {
+    return refundAmount;
+  }
+
+  public void setRefundAmount(Integer refundAmount) {
+    this.refundAmount = refundAmount;
+  }
+
+  public String getReverseFlag() {
+    return reverseFlag;
+  }
+
+  public void setReverseFlag(String reverseFlag) {
+    this.reverseFlag = reverseFlag;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+  public String getRemark() {
+    return remark;
+  }
+
+  public void setRemark(String remark) {
+    this.remark = remark;
+  }
+
+  public String getCreatetime() {
+    return createtime;
+  }
+
+  public void setCreatetime(String createtime) {
+    this.createtime = createtime;
+  }
+
+  public String getTenantid() {
+    return tenantid;
+  }
+
+  public void setTenantid(String tenantid) {
+    this.tenantid = tenantid;
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSubjectdtl.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSubjectdtl.java
index ba51cfd..eaa385c 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSubjectdtl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSubjectdtl.java
@@ -59,6 +59,10 @@
   @NotNull
   private String tenantid = "";
 
+  @Column(name = "DTLTYPE", length = 20)
+  @NotNull
+  private String dtltype;
+
   public String getRefno() {
     return refno;
   }
@@ -170,4 +174,12 @@
   public void setTenantid(String tenantid) {
     this.tenantid = tenantid;
   }
+
+  public String getDtltype() {
+    return dtltype;
+  }
+
+  public void setDtltype(String dtltype) {
+    this.dtltype = dtltype;
+  }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java
index fdd77e5..8435ce1 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java
@@ -58,6 +58,9 @@
   @Column(name = "sourcetype", length = 20)
   private String sourceType = "";
 
+  @Column(name = "SOURCETYPE_REFNO", length = 32)
+  private String sourceTypeRefno;
+
   @Column(name = "outtradeno", length = 60)
   private String outTradeNo = "";
 
@@ -116,6 +119,7 @@
   private String tenantid = "";
 
   @Column(name = "DTLTYPE", length = 20)
+  @NotNull
   private String dtltype;
 
   public String getDtltype() {
@@ -295,6 +299,14 @@
     this.sourceType = sourceType;
   }
 
+  public String getSourceTypeRefno() {
+    return sourceTypeRefno;
+  }
+
+  public void setSourceTypeRefno(String sourceTypeRefno) {
+    this.sourceTypeRefno = sourceTypeRefno;
+  }
+
   public Integer getTransCode() {
     return transCode;
   }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/DictionaryDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/DictionaryDao.java
index 9d36cea..e731908 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/DictionaryDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/DictionaryDao.java
@@ -13,4 +13,7 @@
   List<TDictionary> findAllByDicttype(String dicttype);
 
   void deleteByDicttype(String dicttype);
+
+  @Query("from TDictionary t where t.dicttype=?1 and t.dictval=?2 ")
+  TDictionary getByDicttypeAndDictval(String dicttype, String dictval);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Dictionary.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Dictionary.java
index 46377e9..c7c9d89 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Dictionary.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Dictionary.java
@@ -7,6 +7,7 @@
   public static final String IDTYPE = "idtypeList";
   public static final String SEX = "sexList";
   public static final String ACCOUNT_STATUS = "accountStatusList";
+  public static final String DTLTYPES = "dtltypeList";
 
   /////////////////////////////////////
   public static final String SOURCE_TYPE = "sourcetypeList";
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
index d48c602..2ff2c01 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
@@ -90,16 +90,6 @@
   public static final int LOCK_READ_TIMEOUT = 10015;
 
   /**
-   * 卡已挂失
-   */
-  public static final int ACCOUNT_IS_LOSS = 10016;
-
-  /**
-   * 卡已锁定
-   */
-  public static final int ACCOUNT_IS_LOCKED = 10017;
-
-  /**
    * 费用类别未定义
    */
   public static final int FEETYPE_NOT_EXISTS = 10018;
@@ -140,4 +130,19 @@
 
   public static final int REQUEST_PARAM_EEROR = 30005; // 请求参数实体位置错误
 
+  //============= 交易错误 ============//
+  public static final int CARD_NOT_EXISTS = 40000; //卡不存在
+
+  public static final int CARD_IS_CLOSED = 40001; //卡已注销
+
+  public static final int ACCOUNT_IS_LOSS = 40002; //卡已挂失
+
+  public static final int ACCOUNT_IS_FROZEN = 40003; //卡已挂失
+
+  public static final int ACCOUNT_IS_LOCKED = 40004; //卡已锁定
+
+  public static final int WAIT_QUERY_RESULT = 55555; //查询结果
+
+
+
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/util/YnrccUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/util/YnrccUtil.java
index d5a2528..ef6fea0 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/util/YnrccUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/util/YnrccUtil.java
@@ -26,6 +26,18 @@
   public static final String TRANSTYPE_SIGNCARD = "1"; //签约
   public static final String TRANSTYPE_UNSIGNCARD = "2"; //解约
 
+  public static final String CODE_SUCCESS = "0000"; //成功
+  public static final String CODE_NOT_EXISTS = "0401"; //流水不存在
+  public static final String CODE_EXCEPTION = "10000"; //异常
+
+  //查询接口返回的流水状态
+  public static final String DTL_STATUS_SUCCESS = "0"; //成功
+  public static final String DTL_STATUS_FAIL = "1"; //失败
+  public static final String DTL_STATUS_REFUND = "2"; //已退款
+  public static final String DTL_STATUS_PART_REFUND = "3"; //部分退款
+
+  public static final int QUERY_MAX_COUNT = 3; //查询最大次数
+
   public static final Map<String, String> errcode = new HashMap<>(0);
   static {
     errcode.put("0000", "成功");
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt
index 83bfde8..0a2c5d5 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt
@@ -1,6 +1,9 @@
 package com.supwisdom.dlpay.api
 
 import com.supwisdom.dlpay.api.repositories.ShopaccService
+import com.supwisdom.dlpay.api.service.TransactionServiceProxy
+import com.supwisdom.dlpay.citizencard.service.CitizencardPayService
+import com.supwisdom.dlpay.util.YnrccUtil
 import mu.KotlinLogging
 import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler
 import org.springframework.beans.factory.annotation.Autowired
@@ -17,7 +20,7 @@
 @Configuration
 @EnableAsync
 class SpringAsyncConfig : AsyncConfigurer {
-    @Bean("shopAccBalanceUpdater")
+    @Bean(value = ["shopAccBalanceUpdater", "queryCitizencardPayResult"])
     fun threadPoolExecutor(): Executor {
         return ThreadPoolTaskExecutor().apply {
             corePoolSize = 5
@@ -50,4 +53,59 @@
     fun updateShopBalance(shopdtlRefno: String) {
         shopaccService.recalcShopBalance(shopdtlRefno, true)
     }
+}
+
+@Component
+class CitizencardQueryResultTask {
+    private val logger = KotlinLogging.logger { }
+
+    @Autowired
+    private lateinit var citizencardPayService: CitizencardPayService
+    @Autowired
+    lateinit var transactionService: TransactionServiceProxy
+
+    @Async("queryCitizencardPayResult")
+    fun queryResult(refno: String, qcnt: Int) {
+        try {
+            if(qcnt >= YnrccUtil.QUERY_MAX_COUNT){
+                //查询超最大次数
+                logger.error("查询refno=[$refno]流水结果查询超最大次数[${YnrccUtil.QUERY_MAX_COUNT}]")
+                return
+            }
+
+            logger.info("refno=[$refno]开始第" + (qcnt + 1) + "次查询支付结果：")
+            val resp = citizencardPayService.queryResult(refno)
+            when {
+                YnrccUtil.CODE_SUCCESS == resp.code -> {
+                    //查询成功
+                    when {
+                        YnrccUtil.DTL_STATUS_SUCCESS == resp.status ->
+                            transactionService.success(refno, resp.bankjourno) //流水成功
+                        YnrccUtil.DTL_STATUS_REFUND == resp.status -> {
+                            //流水已退款
+                            return
+                        }
+                        YnrccUtil.DTL_STATUS_PART_REFUND == resp.status -> {
+                            //流水已部分退款 TODO:暂无逻辑
+                            return
+                        }
+                        else -> {
+                            //流水失败
+                            transactionService.fail(refno, "查询流水状态为交易失败")
+                        }
+                    }
+                }
+                YnrccUtil.CODE_NOT_EXISTS == resp.code ->
+                    transactionService.fail(refno, "银行流水不存在") //银行返回流水不存在
+                YnrccUtil.CODE_EXCEPTION == resp.code ->
+                    queryResult(refno, qcnt + 1) //查询次数加1
+                else -> {
+                    //其他明确错误，查询失败
+                    logger.error("查询refno=[$refno]流水结果返回失败：code=[${resp.code}],message=[${resp.message}]")
+                }
+            }
+        } catch (ex: Exception) {
+            ex.printStackTrace()
+        }
+    }
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
index 24efe80..8361ebb 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
@@ -2,16 +2,13 @@
 
 import com.supwisdom.dlpay.api.*
 import com.supwisdom.dlpay.api.bean.*
-import com.supwisdom.dlpay.api.service.AccountUtilServcie
-import com.supwisdom.dlpay.api.service.ConsumePayService
-import com.supwisdom.dlpay.api.service.TransactionServiceProxy
-import com.supwisdom.dlpay.api.service.UserService
+import com.supwisdom.dlpay.api.domain.TReverseDtl
+import com.supwisdom.dlpay.api.service.*
+import com.supwisdom.dlpay.citizencard.service.CitizencardPayService
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
 import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.util.Subject
-import com.supwisdom.dlpay.framework.util.TradeCode
-import com.supwisdom.dlpay.framework.util.TradeDict
-import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import com.supwisdom.dlpay.framework.util.*
+import com.supwisdom.dlpay.util.YnrccUtil
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
 import org.springframework.web.bind.annotation.PostMapping
@@ -33,6 +30,12 @@
     lateinit var consumePayService: ConsumePayService
     @Autowired
     lateinit var transactionService: TransactionServiceProxy
+    @Autowired
+    lateinit var cardService: CardService
+    @Autowired
+    lateinit var citizencardPayService: CitizencardPayService
+    @Autowired
+    lateinit var citizencardQueryResultTask: CitizencardQueryResultTask
 
     /**
      * ============================================================================
@@ -128,9 +131,9 @@
      * */
     @PostMapping("/citizencard/payinit")
     fun citizencardPayinit(@Valid @RequestBody param: CitizenCardPayinitParam): ResponseEntity<Any> {
-        val person = userService.findPersonByIdentityCheckStatus(param.cardNo)
+        val person = cardService.getPersonByCitizencard(param.cardNo)
+        val dtlType = consumePayService.getDtltypeDictionary(param.dtltype, Dictionary.DTLTYPES)
         if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_CITIZEN_CARD)) {
-
             val account = accountUtilServcie.readAccount(person.userid)
             val shopacc = accountUtilServcie.readShopbyShopaccno(param.shopaccno)
             val subject = accountUtilServcie.readSubject(Subject.SUBJNO_PAY_CITIZEN_CARD)
@@ -141,7 +144,8 @@
                 setOutTransInfo(shopacc.shopaccno, param.billno)
                 operator(param.shopaccno, TradeDict.OPERTYPE_SHOP)
                 payinfo = param.cardNo
-                description = "市民卡代扣消费"
+                description = dtlType.dictcaption
+                dtltype = param.dtltype
             }.person(account).apply {
                 setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_OUT)
                 setOpposite(AccountProxy(shopacc))
@@ -149,9 +153,9 @@
                 setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_IN)
                 setOpposite(AccountProxy(account))
             }.and().addDebitCreditRecord(AccountProxy(subject), AccountProxy(account),
-                    param.amount / 100.0, "市民卡代扣消费")
+                    param.amount / 100.0, dtlType.dictcaption)
                     .addDebitCreditRecord(AccountProxy(account), AccountProxy(shopacc),
-                            param.amount / 100.0, "市民卡代扣消费")
+                            param.amount / 100.0, dtlType.dictcaption)
                     .also {
                         param.feelist?.also {
                             TODO("feelist 费用清单未实现！")
@@ -199,23 +203,26 @@
      * */
     @PostMapping("/citizencard/payfinish")
     fun citizencardPayinit(@Valid @RequestBody param: CitizenCardPayfinishParam): ResponseEntity<Any> {
-        val code = transactionService.wip(param.refno).let {
-            CallService.CallCitizenCardPay(
-                    consumePayService.getPaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, it.shopDtl.shopaccno),
-                    it.shopDtl)
-        }
-        if (code.retcode == "0") {
-            transactionService.success(param.refno, "支付").let {
+        val dtl = transactionService.wip(param.refno)
+        var resp = citizencardPayService.cardPay(dtl.shopDtl.shopaccno, dtl.personDtl.userid, MoneyUtil.YuanToFen(dtl.personDtl.amount), dtl.refno)
+        if (YnrccUtil.CODE_SUCCESS == resp.code) {
+            //成功
+            transactionService.success(param.refno, resp.bankjourno).let {
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
                         .success(CitizenPayResponse(it.refno,
                                 it.outTradeNo,
                                 it.shopDtl.amount), "交易确认成功"))
             }
-
+        } else if (YnrccUtil.CODE_EXCEPTION == resp.code) {
+            //去查询
+            citizencardQueryResultTask.queryResult(dtl.refno, 0)
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(TradeErrorCode.WAIT_QUERY_RESULT, "请查询支付结果"))
         } else {
-            transactionService.fail(param.refno).let {
+            //失败
+            transactionService.fail(param.refno, resp.message).let {
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "交易扣费失败-${code.retmsg}"))
+                        .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "交易扣费失败-${resp.message}"))
             }
         }
     }
@@ -227,19 +234,39 @@
      * */
     @PostMapping("/paycancel")
     fun payCancel(@Valid @RequestBody param: ConsumePayCancelParam): ResponseEntity<Any> {
-        consumePayService.getTransactionMainDtl(param.refno, param.billno, param.shopaccno)?.let {
-            val builder = TransactionBuilder().apply {
-                setTransInfo(param.transdate, param.transtime, it.transCode, it.sourceType)
-                setOutTransInfo(it.outId, param.requestbillno)
+        consumePayService.getTransactionMainDtl(param.refno, param.billno, param.shopaccno)?.let {mainDtl->
+            //保存撤销请求
+            val reverseDtl = consumePayService.saveInitReverseDtl(TReverseDtl().apply {
+                this.originRefno = mainDtl.refno
+                this.billno = param.billno
+                this.transdate = param.transdate
+                this.transtime = param.transtime
+                this.refundAmount = null
+                this.reverseFlag = TradeDict.REVERSE_FLAG_CANCEL //撤销
+                this.status = TradeDict.DTL_STATUS_INIT
+                this.createtime = systemUtilService.sysdatetime.hostdatetime
+            })
+
+            try {
+                //TODO: 不管撤销怎么样返回成功
+                val builder = TransactionBuilder().apply {
+                    setTransInfo(param.transdate, param.transtime, mainDtl.transCode, mainDtl.sourceType)
+                    setOutTransInfo(mainDtl.outId, param.requestbillno)
+                }
+                val cancelTrans = builder.cancelInit(mainDtl.refno, transactionService)
+                //fixme: 撤销逻辑
+                if (mainDtl.sourceType.isNotEmpty()) {
+                    // 第三方冲正
+                }
+                transactionService.success(cancelTrans.refno)
+
+            } catch (ex: Exception) {
+                ex.printStackTrace()
             }
-            val cancelTrans = builder.cancelInit(it.refno, transactionService)
-            //fixme: 撤销逻辑
-            if (it.sourceType.isNotEmpty()) {
-                // 第三方冲正
-            }
-            transactionService.success(cancelTrans.refno)
+
+
             return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .success(PayReverseResponse(cancelTrans.refno), "交易确认成功"))
+                    .success(PayReverseResponse(""), "交易确认成功"))
         } ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
                 .fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在"))
     }
@@ -251,24 +278,42 @@
      * */
     @PostMapping("/payrefund")
     fun payRefund(@Valid @RequestBody param: ConsumePayRefundParam): ResponseEntity<Any> {
-        consumePayService.getTransactionMainDtl(param.refno, param.billno, param.shopaccno)?.let {
-            val builder = TransactionBuilder().apply {
-                setTransInfo(param.transdate, param.transtime, it.transCode, it.sourceType)
-                setOutTransInfo(it.outId, param.requestbillno)
+        consumePayService.getTransactionMainDtl(param.refno, param.billno, param.shopaccno)?.let {mainDtl->
+            //保存退款请求
+            val reverseDtl = consumePayService.saveInitReverseDtl(TReverseDtl().apply {
+                this.originRefno = mainDtl.refno
+                this.billno = param.billno
+                this.transdate = param.transdate
+                this.transtime = param.transtime
+                this.refundAmount = null
+                this.reverseFlag = TradeDict.REVERSE_FLAG_REFUND //撤销
+                this.status = TradeDict.DTL_STATUS_INIT
+                this.createtime = systemUtilService.sysdatetime.hostdatetime
+            })
+
+            try{
+                val builder = TransactionBuilder().apply {
+                    setTransInfo(param.transdate, param.transtime, mainDtl.transCode, mainDtl.sourceType)
+                    setOutTransInfo(mainDtl.outId, param.requestbillno)
+                }
+                val refundTrans = builder.refundInit(mainDtl.refno,
+                        param.refundAmount / 100.0, transactionService)
+                //fixme: 撤销逻辑
+                if (mainDtl.sourceType.isNotEmpty()) {
+                    // 第三方冲正
+                }
+                transactionService.success(refundTrans.refno)
+            }catch (ex :Exception){
+                ex.printStackTrace()
             }
-            val refundTrans = builder.refundInit(it.refno,
-                    param.refundAmount / 100.0, transactionService)
-            //fixme: 撤销逻辑
-            if (it.sourceType.isNotEmpty()) {
-                // 第三方冲正
-            }
-            transactionService.success(refundTrans.refno)
+
             return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .success(PayReverseResponse(refundTrans.refno), "交易确认成功"))
+                    .success(PayReverseResponse(""), "交易确认成功"))
         } ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
                 .fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在"))
     }
 
+
     /**
      * ============================================================================
      *                           一卡通支付【交易初始化】
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/card_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/card_service.kt
new file mode 100644
index 0000000..4b09146
--- /dev/null
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/card_service.kt
@@ -0,0 +1,15 @@
+package com.supwisdom.dlpay.api.service
+
+import com.supwisdom.dlpay.api.domain.TCard
+import com.supwisdom.dlpay.api.domain.TPerson
+import org.springframework.transaction.annotation.Transactional
+
+interface CardService {
+    @Transactional(rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun getBankcardByUserid(userid: String): TCard?
+
+    @Transactional(rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun getPersonByCitizencard(cardno: String, ignoreStatus: Boolean? = false): TPerson
+
+
+}
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/consume_pay_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/consume_pay_service.kt
index ec92ddc..02533ab 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/consume_pay_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/consume_pay_service.kt
@@ -1,6 +1,8 @@
 package com.supwisdom.dlpay.api.service
 
+import com.supwisdom.dlpay.api.domain.TReverseDtl
 import com.supwisdom.dlpay.api.domain.TTransactionMain
+import com.supwisdom.dlpay.framework.domain.TDictionary
 import org.springframework.transaction.annotation.Propagation
 import org.springframework.transaction.annotation.Transactional
 
@@ -16,4 +18,13 @@
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class], readOnly = true)
     fun getTransactionMainDtl(refno: String?, billno: String?, shopaccno: String?): TTransactionMain?
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class], readOnly = true)
+    fun getDtltypeDictionary(dictval:String, dicttype:String):TDictionary
+
+    @Transactional(rollbackFor = [Exception::class])
+    fun saveOrUpdateReverseDtl(revDtl: TReverseDtl): TReverseDtl
+
+    //没有事务
+    fun saveInitReverseDtl(revDtl: TReverseDtl): TReverseDtl
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/dali_datasync_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/dali_datasync_service.kt
index 8b378e8..d5a960f 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/dali_datasync_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/dali_datasync_service.kt
@@ -10,7 +10,4 @@
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
     fun doUpdateUserInfos(bean: DaliDatasyncDetail): Boolean
 
-    @Transactional(rollbackFor = arrayOf(Exception::class), readOnly = true)
-    fun getBankcardByUserid(userid: String): TCard?
-
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt
new file mode 100644
index 0000000..4610ef7
--- /dev/null
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt
@@ -0,0 +1,41 @@
+package com.supwisdom.dlpay.api.service.impl
+
+import com.supwisdom.dlpay.api.dao.CardDao
+import com.supwisdom.dlpay.api.dao.PersonDao
+import com.supwisdom.dlpay.api.domain.TCard
+import com.supwisdom.dlpay.api.domain.TPerson
+import com.supwisdom.dlpay.api.service.CardService
+import com.supwisdom.dlpay.exception.TransactionProcessException
+import com.supwisdom.dlpay.framework.util.TradeDict
+import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import com.supwisdom.dlpay.util.ConstantUtil
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Service
+
+@Service
+class CardServiceImpl : CardService {
+    @Autowired
+    lateinit var cardDao: CardDao
+    @Autowired
+    lateinit var personDao: PersonDao
+
+    override fun getBankcardByUserid(userid: String): TCard? {
+        return cardDao.findCardByUseridAndCardtype(userid, ConstantUtil.CARDTYPE_BANKCARD)
+    }
+
+    override fun getPersonByCitizencard(cardno: String, ignoreStatus: Boolean?): TPerson {
+        val cityCard = cardDao.findCardByCardnoAndCardtype(cardno, ConstantUtil.CARDTYPE_CITIZENCARD)
+                ?: throw TransactionProcessException(TradeErrorCode.CARD_NOT_EXISTS, "市民卡[$cardno]不存在！")
+        if (true != ignoreStatus) {
+            when {
+                TradeDict.STATUS_NORMAL != cityCard.status -> throw TransactionProcessException(TradeErrorCode.CARD_IS_CLOSED, "市民卡[$cardno]已经注销！")
+                TradeDict.STATUS_LOST == cityCard.transStatus -> throw TransactionProcessException(TradeErrorCode.ACCOUNT_IS_LOSS, "市民卡[$cardno]已经挂失！")
+                TradeDict.STATUS_FROZEN == cityCard.transStatus -> throw TransactionProcessException(TradeErrorCode.ACCOUNT_IS_FROZEN, "市民卡[$cardno]已经冻结！")
+                TradeDict.STATUS_LOCKED == cityCard.transStatus -> throw TransactionProcessException(TradeErrorCode.ACCOUNT_IS_LOCKED, "市民卡[$cardno]已被锁定！")
+            }
+        }
+
+        return personDao.findByUserid(cityCard.userid)
+                ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "市民卡[$cardno]用户信息不存在！")
+    }
+}
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/consume_pay_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/consume_pay_service_impl.kt
index 6ab347e..0396d36 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/consume_pay_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/consume_pay_service_impl.kt
@@ -1,11 +1,21 @@
 package com.supwisdom.dlpay.api.service.impl
 
+import com.supwisdom.dlpay.api.dao.ReverseDtlDao
 import com.supwisdom.dlpay.api.dao.TransactionMainDao
+import com.supwisdom.dlpay.api.domain.TReverseDtl
 import com.supwisdom.dlpay.api.domain.TTransactionMain
+import com.supwisdom.dlpay.api.exception.RequestParamCheckException
 import com.supwisdom.dlpay.api.service.ConsumePayService
 import com.supwisdom.dlpay.api.service.SourceTypeService
+import com.supwisdom.dlpay.exception.TransactionProcessException
+import com.supwisdom.dlpay.framework.dao.DictionaryDao
+import com.supwisdom.dlpay.framework.domain.TDictionary
+import com.supwisdom.dlpay.framework.tenant.TenantContext
+import com.supwisdom.dlpay.framework.util.Dictionary
 import com.supwisdom.dlpay.framework.util.StringUtil
+import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.dao.DataAccessException
 import org.springframework.stereotype.Service
 
 @Service
@@ -14,6 +24,10 @@
     lateinit var sourceTypeService: SourceTypeService
     @Autowired
     lateinit var transactionMainDao: TransactionMainDao
+    @Autowired
+    lateinit var dictionaryDao: DictionaryDao
+    @Autowired
+    lateinit var reverseDtlDao: ReverseDtlDao
 
     override fun checkShopPaytype(shopaccno: String, sourceType: String, anonymousflag: Boolean?): Boolean {
         return sourceTypeService.checkShopSourceType(shopaccno, sourceType, true == anonymousflag)
@@ -35,5 +49,26 @@
         TODO("未实现方法")
     }
 
+    override fun getDtltypeDictionary(dictval: String, dicttype: String): TDictionary {
+        return dictionaryDao.getByDicttypeAndDictval(dicttype, dictval)
+                ?: throw RequestParamCheckException("未识别流水类别[$dictval]")
+    }
+
+    override fun saveOrUpdateReverseDtl(revDtl: TReverseDtl): TReverseDtl {
+        if (StringUtil.isEmpty(revDtl.tenantid)) {
+            revDtl.tenantid = TenantContext.getTenantSchema()
+        }
+        return reverseDtlDao.save(revDtl)
+    }
+
+    override fun saveInitReverseDtl(revDtl: TReverseDtl): TReverseDtl {
+        return try {
+            saveOrUpdateReverseDtl(revDtl)
+        } catch (ex: DataAccessException) {
+            //唯一索引冲突，其他异常抛出
+            reverseDtlDao.findByOriginRefnoAndBillno(revDtl.originRefno, revDtl.billno)
+                    ?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "保存撤销或退款请求失败")
+        }
+    }
 
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt
index d345330..df5ed08 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt
@@ -129,8 +129,4 @@
         return true
     }
 
-
-    override fun getBankcardByUserid(userid: String): TCard? {
-        return cardDao.findCardByUseridAndCardtype(userid, ConstantUtil.CARDTYPE_BANKCARD)
-    }
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
index d51f97a..99f6948 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
@@ -80,6 +80,7 @@
                 settleDate = null
                 tenantid = TenantContext.getTenantSchema()
                 this.sourceType = sourceType.sourceType
+                dtltype = builder.dtltype
             }
 
             if (builder.hasPerson()) {
@@ -104,6 +105,7 @@
                     this.reverseFlag = TradeDict.REVERSE_FLAG_NONE
                     remark = builder.person().remark
                     tenantid = transaction.tenantid
+                    this.dtltype = builder.dtltype
                     this.status = status
                 }.also {
                     //                    persondtlDao.save(it)
@@ -133,6 +135,7 @@
                     this.reverseFlag = TradeDict.REVERSE_FLAG_NONE
                     this.updateBala = false
                     this.tenantid = transaction.tenantid
+                    this.dtltype = builder.dtltype
                     this.status = status
                 }.also {
                     // save shopdtl
@@ -154,6 +157,7 @@
                     this.oppositeAccNo = builder.subject().oppositeAccNo()
                     this.oppositeAccName = builder.subject().oppositeAccName()
                     this.tenantid = transaction.tenantid
+                    this.dtltype = builder.dtltype
                     this.status = status
                 }.also {
                     transaction.subjectDtl = it
@@ -313,7 +317,7 @@
 
     //////////////////////////////////////////////////////////////////
 // 成功
-    private fun transactionOnSuccess(transaction: TTransactionMain, remark: String, overdraft: Boolean) {
+    private fun transactionOnSuccess(transaction: TTransactionMain, sorcetypeRefno: String, overdraft: Boolean) {
         if (transaction.person) {
             // update account balance
             val amount = transaction.sumAmountByAccno(
@@ -327,21 +331,20 @@
                         "个人流水<${transaction.refno}>不存在")
             }
             transaction.personDtl.status = TradeDict.DTL_STATUS_SUCCESS
-            transaction.personDtl.remark = remark
         }
         if (transaction.shop) {
             transaction.shopDtl.updateBala = false
             transaction.shopDtl.status = TradeDict.DTL_STATUS_SUCCESS
             transaction.shopDtl.accdate = transaction.accdate
-            transaction.shopDtl.remark = remark
         }
 
         if (transaction.subject) {
             // update subject balance
         }
+        transaction.sourceTypeRefno = sorcetypeRefno
     }
 
-    override fun success(refno: String, remark: String): TTransactionMain {
+    override fun success(refno: String, sourcetypeRefno: String): TTransactionMain {
         val transaction = transactionMainDao.findByRefnoForUpdate(refno)
                 ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "参考号<$refno>错误，流水不存在")
 
@@ -351,7 +354,7 @@
         }
         transaction.status = TradeDict.DTL_STATUS_SUCCESS
         transaction.accdate = systemUtilService.accdate
-        transactionOnSuccess(transaction, remark, false)
+        transactionOnSuccess(transaction, sourcetypeRefno, false)
 
         transaction.endTime = systemUtilService.sysdatetime.sysdate
         transactionMainDao.save(transaction)
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
index fff1a0e..011244a 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
@@ -27,7 +27,7 @@
     fun fail(refno: String, remark: String): TTransactionMain
 
     @Transactional
-    fun success(refno: String, remark: String): TTransactionMain
+    fun success(refno: String, sourcetypeRefno: String): TTransactionMain
 
     @Transactional
     fun success(refno: String): TTransactionMain
@@ -84,8 +84,8 @@
         return transactionService.fail(refno, remark)
     }
 
-    fun success(refno: String, remark: String): TTransactionMain {
-        return transactionService.success(refno, remark).also {
+    fun success(refno: String, sourcetypeRefno: String): TTransactionMain {
+        return transactionService.success(refno, sourcetypeRefno).also {
             if (it.shop) {
                 shopAccBalanceAsyncTask.updateShopBalance(it.refno)
             }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
index a237617..b0f583f 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
@@ -211,6 +211,7 @@
     var payinfo: String = ""
     var description: String = ""
     var remark: String = ""
+    var dtltype: String = ""
 
     fun person(): PersonTranactionBuilder {
         return this.personBuilder
@@ -295,6 +296,11 @@
     }
 
     fun preCheck() {
+        if (dtltype.isNullOrEmpty()) {
+            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+                    "流水类型错误")
+        }
+
         if (outId.isNotEmpty() && outtradeno.isEmpty()) {
             throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
                     "第三方账号未指定第三方流水号")
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/citizencard_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/citizencard_service.kt
index 5da1116..49dbe4d 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/citizencard_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/citizencard_service.kt
@@ -1,18 +1,18 @@
 package com.supwisdom.dlpay.citizencard.service
 
 import com.supwisdom.dlpay.api.bean.DlpayResp
-import com.supwisdom.dlpay.api.domain.TPerson
 
 interface CitizencardPayService {
     fun bindCard(bankcardno: String, username: String, idtype: String, idno: String, phone: String): DlpayResp
 
     fun signCard(bankcardno: String, username: String, idtype: String, idno: String, phone: String, transtype: String): DlpayResp
 
-    fun cardPay(shopaccno: String, person: TPerson, amount: Int, refno: String): DlpayResp
+    fun cardPay(shopaccno: String, userid: String, amount: Int, refno: String): DlpayResp
 
     fun cardPayRefund(refno: String, orignRefno: String, amount: Int): DlpayResp
 
-    fun queryResult(refno: String, orignRefno: String): DlpayResp
+    fun queryResult(orignRefno: String): DlpayResp
 
+    fun getChkfilename(checkdate: String, merchantBankcardno: String?): DlpayResp
 
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/impl/citizencard_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/impl/citizencard_service_impl.kt
index 96b8dda..2439bcf 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/impl/citizencard_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/impl/citizencard_service_impl.kt
@@ -4,9 +4,9 @@
 import com.sun.jersey.api.client.Client
 import com.sun.jersey.api.client.ClientResponse
 import com.supwisdom.dlpay.api.bean.DlpayResp
-import com.supwisdom.dlpay.api.domain.TPerson
-import com.supwisdom.dlpay.api.service.DaliDatasyncService
+import com.supwisdom.dlpay.api.service.CardService
 import com.supwisdom.dlpay.api.service.SourceTypeService
+import com.supwisdom.dlpay.api.service.UserService
 import com.supwisdom.dlpay.api.types.IDTypes
 import com.supwisdom.dlpay.citizencard.service.CitizencardPayService
 import com.supwisdom.dlpay.framework.service.SystemUtilService
@@ -14,15 +14,19 @@
 import com.supwisdom.dlpay.util.YnrccUtil
 import mu.KotlinLogging
 import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Service
 import javax.ws.rs.core.MediaType
 
+@Service
 class CitizencardPayServiceImpl : CitizencardPayService {
     @Autowired
     lateinit var sourceTypeService: SourceTypeService
     @Autowired
     lateinit var systemUtilService: SystemUtilService
     @Autowired
-    lateinit var daliDatasyncService: DaliDatasyncService
+    lateinit var cardService: CardService
+    @Autowired
+    lateinit var userService: UserService
 
     private val logger = KotlinLogging.logger { }
 
@@ -148,7 +152,7 @@
         }
     }
 
-    override fun cardPay(shopaccno: String, person: TPerson, amount: Int, refno: String): DlpayResp {
+    override fun cardPay(shopaccno: String, userid: String, amount: Int, refno: String): DlpayResp {
         var resp = DlpayResp()
         val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, shopaccno, false, false)
         if (!checkCitizencardConfig(config, resp)) {
@@ -162,6 +166,7 @@
             logger.error(resp.message)
             return resp
         }
+        val person = userService.findOnePersonByUserid(userid)
         val idType = IDTypes.findByValue(person.idtype)
         if (idType < 0) {
             resp.code = YnrccUtil.PARAM_VALUE_ERROR
@@ -169,7 +174,7 @@
             logger.error(resp.message)
             return resp
         }
-        val userBankcard = daliDatasyncService.getBankcardByUserid(person.userid)
+        val userBankcard = cardService.getBankcardByUserid(person.userid)
         if (null == userBankcard) {
             resp.code = "99"
             resp.message = "用户[${person.userid}]未绑定银行卡"
@@ -210,18 +215,26 @@
         params["sign"] = sign
         val url = config[YnrccUtil.YNRCC_ANGENT_URL]!!.trim() + "/cardpay"
         logger.error("url=[$url], params=[" + Gson().toJson(params) + "]")
-        val client = Client.create()
-        client.setConnectTimeout(YnrccUtil.AGENT_CONNECT_TIMEOUT * 1000)
-        val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).post(ClientResponse::class.java)
-        return if (200 == respClient.status) {
-            resp = respClient.getEntity(DlpayResp::class.java)
-            logger.error("refno=[$refno], url=[$url], return=[" + Gson().toJson(resp) + "]")
-            resp
-        } else {
-            resp.code = "99"
-            resp.message = "请求前置返回失败[httpStatus=$respClient.status]"
+        try {
+            val client = Client.create()
+            client.setConnectTimeout(YnrccUtil.AGENT_CONNECT_TIMEOUT * 1000)
+            val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).post(ClientResponse::class.java)
+            return if (200 == respClient.status) {
+                resp = respClient.getEntity(DlpayResp::class.java)
+                logger.error("refno=[$refno], url=[$url], return=[" + Gson().toJson(resp) + "]")
+                resp
+            } else {
+                resp.code = "99"
+                resp.message = "请求前置返回失败[httpStatus=$respClient.status]"
+                logger.error(resp.message)
+                resp
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+            resp.code = YnrccUtil.CODE_EXCEPTION
+            resp.message = "请求前置抛出异常"
             logger.error(resp.message)
-            resp
+            return resp
         }
     }
 
@@ -248,22 +261,30 @@
         params["sign"] = sign
         val url = config[YnrccUtil.YNRCC_ANGENT_URL]!!.trim() + "/cardpayrefund"
         logger.error("url=[$url], params=[" + Gson().toJson(params) + "]")
-        val client = Client.create()
-        client.setConnectTimeout(YnrccUtil.AGENT_CONNECT_TIMEOUT * 1000)
-        val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).post(ClientResponse::class.java)
-        return if (200 == respClient.status) {
-            resp = respClient.getEntity(DlpayResp::class.java)
-            logger.error("refno=[$refno], url=[$url], return=[" + Gson().toJson(resp) + "]")
-            resp
-        } else {
-            resp.code = "99"
-            resp.message = "请求前置返回失败[httpStatus=$respClient.status]"
+        try {
+            val client = Client.create()
+            client.setConnectTimeout(YnrccUtil.AGENT_CONNECT_TIMEOUT * 1000)
+            val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).post(ClientResponse::class.java)
+            return if (200 == respClient.status) {
+                resp = respClient.getEntity(DlpayResp::class.java)
+                logger.error("refno=[$refno], url=[$url], return=[" + Gson().toJson(resp) + "]")
+                resp
+            } else {
+                resp.code = "99"
+                resp.message = "请求前置返回失败[httpStatus=$respClient.status]"
+                logger.error(resp.message)
+                resp
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+            resp.code = YnrccUtil.CODE_EXCEPTION
+            resp.message = "请求前置抛出异常"
             logger.error(resp.message)
-            resp
+            return resp
         }
     }
 
-    override fun queryResult(refno: String, orignRefno: String): DlpayResp {
+    override fun queryResult(orignRefno: String): DlpayResp {
         var resp = DlpayResp()
         val config = sourceTypeService.getChargePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, true)
         if (!checkCitizencardConfig(config, resp)) {
@@ -271,6 +292,7 @@
         }
 
         val systime = systemUtilService.sysdatetime
+        val refno = systemUtilService.refno
         val params = hashMapOf<String, String>()
         params.plus(mapOf(
                 "transcode" to YnrccUtil.BANKCARD_QUERYRESULT_TRANSCODE,
@@ -284,6 +306,51 @@
         params["sign"] = sign
         val url = config[YnrccUtil.YNRCC_ANGENT_URL]!!.trim() + "/queryresult"
         logger.error("url=[$url], params=[" + Gson().toJson(params) + "]")
+        try {
+            val client = Client.create()
+            client.setConnectTimeout(YnrccUtil.AGENT_CONNECT_TIMEOUT * 1000)
+            val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).post(ClientResponse::class.java)
+            return if (200 == respClient.status) {
+                resp = respClient.getEntity(DlpayResp::class.java)
+                logger.error("refno=[$orignRefno], url=[$url], return=[" + Gson().toJson(resp) + "]")
+                resp
+            } else {
+                resp.code = "99"
+                resp.message = "请求前置返回失败[httpStatus=$respClient.status]"
+                logger.error(resp.message)
+                resp
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+            resp.code = YnrccUtil.CODE_EXCEPTION
+            resp.message = "请求前置抛出异常"
+            logger.error(resp.message)
+            return resp
+        }
+    }
+
+    override fun getChkfilename(checkdate: String, merchantBankcardno: String?): DlpayResp {
+        var resp = DlpayResp()
+        val config = sourceTypeService.getChargePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, true)
+        if (!checkCitizencardConfig(config, resp)) {
+            return resp
+        }
+        val systime = systemUtilService.sysdatetime
+        val refno = systemUtilService.refno
+        val params = hashMapOf<String, String>()
+        params.plus(mapOf(
+                "transcode" to YnrccUtil.BANKCARD_BIND_TRANSCODE,
+                "transdate" to systime.hostdate,
+                "transtime" to systime.hosttime,
+                "refno" to refno,
+                "checkdate" to checkdate,
+                "merchant_bankcardno" to merchantBankcardno,
+                "sign_type" to "MD5"
+        ))
+        val sign = MD5.encodeByMD5(StringUtil.createLinkString(StringUtil.paraFilter(params)) + config[YnrccUtil.YNRCC_SIGNKEY]!!.trim())
+        params["sign"] = sign
+        val url = config[YnrccUtil.YNRCC_ANGENT_URL]!!.trim() + "/bindcard"
+        logger.error("url=[$url], params=[" + Gson().toJson(params) + "]")
         val client = Client.create()
         client.setConnectTimeout(YnrccUtil.AGENT_CONNECT_TIMEOUT * 1000)
         val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).post(ClientResponse::class.java)
@@ -297,8 +364,6 @@
             logger.error(resp.message)
             resp
         }
-
     }
 
-
 }
\ No newline at end of file
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index 610e4fd..a9878e1 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -560,5 +560,17 @@
 VALUES (25, 'locked', 'accountStatusList', '锁定', '账户状态', '{tenantid}');
 INSERT INTO "tb_dictionary" ("id", "dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
 VALUES (26, 'unknown', 'accountStatusList', '异常', '账户状态', '{tenantid}');
+
+
+INSERT INTO "tb_dictionary" ("id", "dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES (27, 'water', 'dtltypeList', '生活用水', '流水类型', '{tenantid}');
+INSERT INTO "tb_dictionary" ("id", "dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES (28, 'carbus', 'dtltypeList', '乘车', '流水类型', '{tenantid}');
+INSERT INTO "tb_dictionary" ("id", "dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES (29, 'canteen', 'dtltypeList', '食堂就餐', '流水类型', '{tenantid}');
+INSERT INTO "tb_dictionary" ("id", "dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES (30, 'shopmarket', 'dtltypeList', '商超消费', '流水类型', '{tenantid}');
+
+
 ----------------------------------------------------
 commit;
\ No newline at end of file
