diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentCode.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentCode.java
new file mode 100644
index 0000000..a203a67
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentCode.java
@@ -0,0 +1,34 @@
+package com.supwisdom.dlpay.agent;
+
+public enum AgentCode {
+  SUCCESS("success", "成功"),
+  FAIL("fail", "交易失败"),
+  REFNO_NOT_EXISTS("refno_not_exists", "指定流水不存在"),
+  ILLEGAL_DATA("illege_data", "数据不合法，不能交易"),
+  SERVER_INTERNAL_ERROR("server_internal_error", "交易系统错误"),
+  NEED_QUERY("need_query", "交易未完成，请查询"),
+  WAIT_NOTIFY("wait_notify", "交易已发起，等待通知"),
+  SHORT_OF_BALANCE("short_of_balance", "余额不足"),
+  COMMON_ERROR("common_error", "其它错误");
+
+  AgentCode(String code, String msg) {
+    this.code = code;
+    this.msg = msg;
+  }
+
+  public String value() {
+    return this.code;
+  }
+
+  public String message() {
+    return this.msg;
+  }
+
+  private String code;
+  private String msg;
+
+  @Override
+  public String toString() {
+    return code;
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentConst.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentConst.java
new file mode 100644
index 0000000..6807f6b
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentConst.java
@@ -0,0 +1,5 @@
+package com.supwisdom.dlpay.agent;
+
+public class AgentConst {
+
+}
\ No newline at end of file
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentPayService.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentPayService.java
new file mode 100644
index 0000000..5ba80d6
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentPayService.java
@@ -0,0 +1,13 @@
+package com.supwisdom.dlpay.agent;
+
+import com.supwisdom.dlpay.api.domain.TTransactionMain;
+
+public interface AgentPayService {
+  AgentResponse pay(TTransactionMain transaction);
+
+  AgentResponse cancel(TTransactionMain transaction);
+
+  AgentResponse refund(TTransactionMain transaction);
+
+  AgentResponse query(TTransactionMain transaction);
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java
new file mode 100644
index 0000000..79bd0be
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java
@@ -0,0 +1,14 @@
+package com.supwisdom.dlpay.agent;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class AgentResponse {
+  private AgentCode code;
+  private String agentCode;
+  private String agentMsg;
+
+  private String agentRefno;
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayResp.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/DlpayResp.java
similarity index 97%
rename from payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayResp.java
rename to payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/DlpayResp.java
index 3f01175..ba28bb8 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayResp.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/DlpayResp.java
@@ -1,4 +1,4 @@
-package com.supwisdom.dlpay.api.bean;
+package com.supwisdom.dlpay.agent.citizencard;
 
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccRespCode.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccRespCode.java
new file mode 100644
index 0000000..b1512d5
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccRespCode.java
@@ -0,0 +1,13 @@
+package com.supwisdom.dlpay.agent.citizencard;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+public class YnrccRespCode {
+  private String code;
+  private String msg;
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java
new file mode 100644
index 0000000..5b28763
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java
@@ -0,0 +1,81 @@
+package com.supwisdom.dlpay.agent.citizencard;
+
+import com.supwisdom.dlpay.agent.AgentCode;
+import org.springframework.data.util.Pair;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class YnrccUtil {
+  public static final String BANKCARD_BIND_TRANSCODE = "BC5510";
+  public static final String BANKCARD_SIGN_TRANSCODE = "BC5511";
+  public static final String BANKCARD_PAY_TRANSCODE = "BC5512";
+  public static final String BANKCARD_PAYREFUND_TRANSCODE = "BC5513";
+  public static final String BANKCARD_QUERYRESULT_TRANSCODE = "BC5514";
+  public static final String BANKCARD_CHKFILE_TRANSCODE = "BC5515";
+
+  public static final String DLPAY_CATEGORIE = "C001"; //消费类别
+
+  public static final String YNRCC_ANGENT_URL = "ynrcc.agent.url"; //农商行前置url
+  public static final String YNRCC_SIGNKEY = "ynrcc.agent.signkey"; //农商行前置md5key
+  public static final String YNRCC_MERCHANT_BANKCARDNO = "merchant.bankcardno";
+  public static final String YNRCC_MERCHANT_BANKACCNAME = "merchant.bankaccname";
+
+  public static final String PARAM_CONFIG_ERROR = "90000"; // 参数未配置
+  public static final String PARAM_VALUE_ERROR = "90001"; // 参数值错误
+
+  public static final int AGENT_CONNECT_TIMEOUT = 20;
+  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 List<Pair<AgentCode, YnrccRespCode>> errcode = new ArrayList<>(0);
+
+  static {
+    errcode.add(Pair.of(AgentCode.SUCCESS, new YnrccRespCode("0000", "成功")));
+    errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0101", "手机号不一致")));
+    errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0102", "无预留手机号")));
+    errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0103", "证件类型不一致")));
+    errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0104", "证件号码不一致")));
+    errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0105", "户名不符")));
+    errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0106", "卡状态异常")));
+    errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0107", "无此卡号")));
+    errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0108", "已存在签约信息,与签约证件号码不符")));
+    errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0109", "已存在签约信息,与签约证件类型不符")));
+    errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0110", "已存在签约信息,与签约户名不符")));
+    errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0111", "已存在签约信息,与签约手机号不符")));
+
+    errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0201", "未进行银行卡绑定")));
+    errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0202", "无效的交易类型")));
+    errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0301", "未签约")));
+    errcode.add(Pair.of(AgentCode.SHORT_OF_BALANCE, new YnrccRespCode("0302", "余额不足")));
+    errcode.add(Pair.of(AgentCode.SERVER_INTERNAL_ERROR, new YnrccRespCode("0303", "MD5校验失败")));
+    errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0304", "该卡号已经解约,不允许重复解约")));
+    errcode.add(Pair.of(AgentCode.FAIL, new YnrccRespCode("0401", "原始流水不存在")));
+    errcode.add(Pair.of(AgentCode.FAIL, new YnrccRespCode("0402", "原始流水未成功")));
+    errcode.add(Pair.of(AgentCode.FAIL, new YnrccRespCode("0403", "原始流水已退款")));
+    errcode.add(Pair.of(AgentCode.SHORT_OF_BALANCE, new YnrccRespCode("0404", "商户账户余额不足")));
+    errcode.add(Pair.of(AgentCode.FAIL, new YnrccRespCode("0405", "不在退款时间范围内")));
+    errcode.add(Pair.of(AgentCode.SUCCESS, new YnrccRespCode("0406", "当日无交易明细")));
+    errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0407", "非大理市民卡,不允许交易")));
+    errcode.add(Pair.of(AgentCode.FAIL, new YnrccRespCode("0408", "同一请求流水号不允许重复提交")));
+    errcode.add(Pair.of(AgentCode.COMMON_ERROR, new YnrccRespCode("4444", "其他错误")));
+    errcode.add(Pair.of(AgentCode.NEED_QUERY, new YnrccRespCode(CODE_EXCEPTION, "待查询")));
+    errcode.add(Pair.of(AgentCode.SERVER_INTERNAL_ERROR, new YnrccRespCode(PARAM_CONFIG_ERROR, "{message}")));
+    errcode.add(Pair.of(AgentCode.SERVER_INTERNAL_ERROR, new YnrccRespCode(PARAM_VALUE_ERROR, "{message}")));
+  }
+
+
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionMainDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionMainDao.java
index 476a1fa..3fb3544 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionMainDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionMainDao.java
@@ -16,6 +16,10 @@
   @Query(value = "select t from TTransactionMain t where t.refno = ?1")
   TTransactionMain findByRefnoForUpdate(String refno);
 
+  @Lock(LockModeType.OPTIMISTIC)
+  @Query(value = "select t from TTransactionMain  t where t.refno = ?1")
+  TTransactionMain findByRefnoNoLock(String refno);
+
 
   TTransactionMain findByRefno(String refno);
 
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 8435ce1..8d34d10 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
@@ -2,6 +2,7 @@
 
 import com.supwisdom.dlpay.framework.util.Subject;
 import com.supwisdom.dlpay.framework.util.TradeDict;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 
 import javax.persistence.*;
 import javax.validation.constraints.Digits;
@@ -83,6 +84,10 @@
   @Column(name = "end_time")
   private Timestamp endTime;
 
+  @Column(name = "update_time")
+  @Version
+  private Timestamp updateTime;
+
   @Column(name = "reverse_type", nullable = false, length = 10)
   @NotNull
   private String reverseType = TradeDict.REVERSE_FLAG_NONE; // 流水标识， none - 正常交易流水， cancel - 撤销流水， refund - 退款流水
@@ -379,4 +384,12 @@
   public void setTenantid(String tenantid) {
     this.tenantid = tenantid;
   }
+
+  public Timestamp getUpdateTime() {
+    return updateTime;
+  }
+
+  public void setUpdateTime(Timestamp updateTime) {
+    this.updateTime = updateTime;
+  }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
index 57f5b3b..85c2578 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
@@ -96,6 +96,7 @@
    * - refund : 手工撤销
    */
   public static final String REVERSE_FLAG_NONE = "none";
+  public static final String REVERSE_FLAG_WIP = "wip";
   public static final String REVERSE_FLAG_CANCEL = "cancel";
   public static final String REVERSE_FLAG_REFUND = "refund";
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/util/YnrccUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/util/YnrccUtil.java
deleted file mode 100644
index 77b7116..0000000
--- a/payapi/src/main/java/com/supwisdom/dlpay/util/YnrccUtil.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.supwisdom.dlpay.util;
-
-import java.util.HashMap;
-import java.util.Map;
-
-
-public class YnrccUtil {
-  public static final String BANKCARD_BIND_TRANSCODE = "BC5510";
-  public static final String BANKCARD_SIGN_TRANSCODE = "BC5511";
-  public static final String BANKCARD_PAY_TRANSCODE = "BC5512";
-  public static final String BANKCARD_PAYREFUND_TRANSCODE = "BC5513";
-  public static final String BANKCARD_QUERYRESULT_TRANSCODE = "BC5514";
-  public static final String BANKCARD_CHKFILE_TRANSCODE = "BC5515";
-
-  public static final String DLPAY_CATEGORIE = "C001"; //消费类别
-
-  public static final String YNRCC_ANGENT_URL = "ynrcc.agent.url"; //农商行前置url
-  public static final String YNRCC_SIGNKEY = "ynrcc.agent.signkey"; //农商行前置md5key
-  public static final String YNRCC_MERCHANT_BANKCARDNO = "merchant.bankcardno";
-  public static final String YNRCC_MERCHANT_BANKACCNAME = "merchant.bankaccname";
-
-  public static final String PARAM_CONFIG_ERROR = "90000"; // 参数未配置
-  public static final String PARAM_VALUE_ERROR = "90001"; // 参数值错误
-
-  public static final int AGENT_CONNECT_TIMEOUT = 20;
-  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", "成功");
-    errcode.put("0101", "手机号不一致");
-    errcode.put("0102", "无预留手机号");
-    errcode.put("0103", "证件类型不一致");
-    errcode.put("0104", "证件号码不一致");
-    errcode.put("0105", "户名不符");
-    errcode.put("0106", "卡状态异常");
-    errcode.put("0107", "无此卡号");
-    errcode.put("0108", "已存在签约信息,与签约证件号码不符");
-    errcode.put("0109", "已存在签约信息,与签约证件类型不符");
-    errcode.put("0110", "已存在签约信息,与签约户名不符");
-    errcode.put("0111", "已存在签约信息,与签约手机号不符");
-
-    errcode.put("0201", "未进行银行卡绑定");
-    errcode.put("0202", "无效的交易类型");
-    errcode.put("0301", "未签约");
-    errcode.put("0302", "余额不足");
-    errcode.put("0303", "MD5校验失败");
-    errcode.put("0304", "该卡号已经解约,不允许重复解约");
-    errcode.put("0401", "原始流水不存在");
-    errcode.put("0402", "原始流水未成功");
-    errcode.put("0403", "原始流水已退款");
-    errcode.put("0404", "商户账户余额不足");
-    errcode.put("0405", "不在退款时间范围内");
-    errcode.put("0406", "当日无交易明细");
-    errcode.put("0407", "非大理市民卡,不允许交易");
-    errcode.put("0408", "同一请求流水号不允许重复提交");
-    errcode.put("4444", "其他错误");
-  }
-
-
-
-
-}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
new file mode 100644
index 0000000..8e02f9d
--- /dev/null
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
@@ -0,0 +1,86 @@
+package com.supwisdom.dlpay.agent.service
+
+import com.supwisdom.dlpay.agent.AgentCode
+import com.supwisdom.dlpay.agent.AgentPayService
+import com.supwisdom.dlpay.agent.AgentResponse
+import com.supwisdom.dlpay.agent.citizencard.DlpayResp
+import com.supwisdom.dlpay.agent.citizencard.YnrccRespCode
+import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
+import com.supwisdom.dlpay.api.domain.TTransactionMain
+import com.supwisdom.dlpay.framework.util.MoneyUtil
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Component
+
+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, userid: String, accdate: String, amount: Int, refno: String): DlpayResp
+
+    fun cardPayRefund(refno: String, accdate: String, orignRefno: String, amount: Int): DlpayResp
+
+    fun queryResult(orignRefno: String): DlpayResp
+
+    fun getChkfilename(checkdate: String, merchantBankcardno: String?): DlpayResp
+
+}
+
+@Component
+class CitizenCardPayAgent : AgentPayService {
+    @Autowired
+    private lateinit var citizencardPayService: CitizencardPayService
+
+    private fun agentCode(code: String, msg: String?): org.springframework.data.util.Pair<AgentCode, YnrccRespCode> {
+        return YnrccUtil.errcode.firstOrNull {
+            it.second.code == code
+        }?.let {
+            org.springframework.data.util.Pair.of(it.first, YnrccRespCode(
+                    code, it.second.msg.replace("{message}", msg ?: "未知")
+            ))
+        } ?: org.springframework.data.util.Pair.of(AgentCode.COMMON_ERROR,
+                YnrccRespCode(code, msg ?: "未知"))
+    }
+
+    override fun pay(transaction: TTransactionMain): AgentResponse {
+        val resp = citizencardPayService.cardPay(transaction.shopDtl.shopaccno, transaction.personDtl.userid, transaction.accdate,
+                MoneyUtil.YuanToFen(transaction.personDtl.amount), transaction.refno)
+
+        return AgentResponse().also {
+            val code = agentCode(resp.code, resp.message)
+            it.code = code.first
+            it.agentCode = code.second.code
+            it.agentMsg = code.first.message() + "-" + code.second.msg
+            it.agentRefno = resp.bankjourno
+        }
+    }
+
+    override fun cancel(transaction: TTransactionMain): AgentResponse {
+        return refund(transaction)
+    }
+
+    override fun refund(transaction: TTransactionMain): AgentResponse {
+        val resp = citizencardPayService.cardPayRefund(transaction.refno, transaction.accdate,
+                transaction.reverseRefno, MoneyUtil.YuanToFen(transaction.personDtl.amount))
+
+        return AgentResponse().also {
+            val code = agentCode(resp.code, resp.message)
+            it.code = code.first
+            it.agentCode = code.second.code
+            it.agentMsg = code.first.message() + "-" + code.second.msg
+            it.agentRefno = resp.bankjourno
+        }
+    }
+
+    override fun query(transaction: TTransactionMain): AgentResponse {
+        val resp = citizencardPayService.queryResult(transaction.refno)
+
+        return AgentResponse().also {
+            val code = agentCode(resp.code, resp.message)
+            it.code = code.first
+            it.agentCode = code.second.code
+            it.agentMsg = code.first.message() + "-" + code.second.msg
+            it.agentRefno = resp.bankjourno
+        }
+    }
+}
\ 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/agent/service/impl/citizencard_service_impl.kt
similarity index 97%
rename from payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/impl/citizencard_service_impl.kt
rename to payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
index 8868a0b..554ece6 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/impl/citizencard_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
@@ -1,17 +1,17 @@
-package com.supwisdom.dlpay.citizencard.service.impl
+package com.supwisdom.dlpay.agent.service.impl
 
 import com.google.gson.Gson
 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.agent.citizencard.DlpayResp
 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.agent.service.CitizencardPayService
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.*
-import com.supwisdom.dlpay.util.YnrccUtil
+import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
 import mu.KotlinLogging
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
@@ -339,7 +339,7 @@
         val refno = systemUtilService.refno
         val params = hashMapOf<String, String>()
         params.plus(mapOf(
-                "transcode" to YnrccUtil.BANKCARD_BIND_TRANSCODE,
+                "transcode" to YnrccUtil.BANKCARD_CHKFILE_TRANSCODE,
                 "transdate" to systime.hostdate,
                 "transtime" to systime.hosttime,
                 "refno" to refno,
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 78e2834..73f8ba6 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
@@ -2,8 +2,8 @@
 
 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 com.supwisdom.dlpay.agent.service.CitizencardPayService
+import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
 import mu.KotlinLogging
 import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler
 import org.springframework.beans.factory.annotation.Autowired
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 8ffa2ec..2760298 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
@@ -1,13 +1,16 @@
 package com.supwisdom.dlpay.api.controller
 
+import com.supwisdom.dlpay.agent.AgentCode
 import com.supwisdom.dlpay.api.*
 import com.supwisdom.dlpay.api.bean.*
 import com.supwisdom.dlpay.api.service.*
-import com.supwisdom.dlpay.citizencard.service.CitizencardPayService
+import com.supwisdom.dlpay.agent.service.CitizencardPayService
+import com.supwisdom.dlpay.exception.TransactionCheckException
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.*
-import com.supwisdom.dlpay.util.YnrccUtil
+import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
+import com.supwisdom.dlpay.agent.service.CitizenCardPayAgent
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
 import org.springframework.web.bind.annotation.PostMapping
@@ -33,6 +36,9 @@
     lateinit var cardService: CardService
     @Autowired
     lateinit var citizencardPayService: CitizencardPayService
+
+    @Autowired
+    private lateinit var citizenCardPayAgent: CitizenCardPayAgent
     @Autowired
     lateinit var citizencardQueryResultTask: CitizencardQueryResultTask
 
@@ -203,26 +209,30 @@
     @PostMapping("/citizencard/payfinish")
     fun citizencardPayinit(@Valid @RequestBody param: CitizenCardPayfinishParam): ResponseEntity<Any> {
         val dtl = transactionService.wip(param.refno)
-        val resp = citizencardPayService.cardPay(dtl.shopDtl.shopaccno, dtl.personDtl.userid, dtl.accdate, MoneyUtil.YuanToFen(dtl.personDtl.amount), dtl.refno)
-        when {
-            YnrccUtil.CODE_SUCCESS == resp.code -> //成功
-                transactionService.success(dtl.refno, resp.bankjourno, false).let {
+        val resp = citizenCardPayAgent.pay(dtl)
+        when (resp.code) {
+            AgentCode.SUCCESS ->
+                transactionService.success(dtl.refno, resp.agentRefno, false).let {
                     return ResponseEntity.ok(ResponseBodyBuilder.create()
                             .success(CitizenPayResponse(it.refno,
                                     it.outTradeNo,
                                     it.shopDtl.amount), "交易确认成功"))
+
+
                 }
-            YnrccUtil.CODE_EXCEPTION == resp.code -> {
+            AgentCode.NEED_QUERY -> {
                 //去查询
                 citizencardQueryResultTask.queryResult(dtl.refno, 0)
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .data("refno", dtl.refno)
-                        .fail(TradeErrorCode.WAIT_QUERY_RESULT, "请查询支付结果"))
+                        .fail(CitizenPayResponse(dtl.refno,
+                                dtl.outTradeNo,
+                                dtl.shopDtl.amount), TradeErrorCode.WAIT_QUERY_RESULT, "请查询支付结果"))
             }
             else -> //失败
-                transactionService.fail(param.refno, resp.message).let {
+                transactionService.fail(param.refno, resp.agentMsg).let {
                     return ResponseEntity.ok(ResponseBodyBuilder.create()
-                            .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "交易扣费失败-${resp.message}"))
+                            .fail(CitizenPayResponse(dtl.refno, dtl.outTradeNo, dtl.shopDtl.amount),
+                                    TradeErrorCode.BUSINESS_DEAL_ERROR, "交易扣费失败-${resp.agentMsg}"))
                 }
         }
     }
@@ -261,35 +271,38 @@
 
                 }
                 TradeDict.PAYTYPE_CITIZEN_CARD == mainDtl.sourceType -> {
-
-                    val resp = citizencardPayService.cardPayRefund(cancelTrans.refno, cancelTrans.accdate, mainDtl.refno, MoneyUtil.YuanToFen(mainDtl.personDtl.amount))
-                    when {
-                        YnrccUtil.CODE_SUCCESS == resp.code -> {
-                            transactionService.success(cancelTrans.refno, resp.bankjourno, false)
+                    val resp = citizenCardPayAgent.pay(cancelTrans)
+                    when (resp.code) {
+                        AgentCode.SUCCESS -> {
+                            transactionService.success(cancelTrans.refno, resp.agentRefno, false)
 
                             return ResponseEntity.ok(ResponseBodyBuilder.create()
                                     .success(PayReverseResponse(cancelTrans.refno), "交易撤销成功"))
                         }
-                        YnrccUtil.CODE_EXCEPTION == resp.code -> {
+                        AgentCode.NEED_QUERY -> {
                             //待查询
                             citizencardQueryResultTask.queryResult(cancelTrans.refno, 0)
                             return ResponseEntity.ok(ResponseBodyBuilder.create()
-                                    .data("cancelRefno", cancelTrans.refno)
-                                    .fail(TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
+                                    .fail(PayReverseResponse(cancelTrans.refno),
+                                            TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
                         }
-                        else -> transactionService.fail(cancelTrans.refno, resp.message).let {
+                        else -> transactionService.fail(cancelTrans.refno,
+                                "${resp.agentCode}-${resp.agentMsg}").let {
                             return ResponseEntity.ok(ResponseBodyBuilder.create()
-                                    .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "交易撤销失败-${resp.message}"))
+                                    .fail(PayReverseResponse(cancelTrans.refno),
+                                            TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
                         }
                     }
                 }
                 else -> return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "暂不支持支付方式[${mainDtl.sourceType}]的流水撤销"))
+                        .fail(PayReverseResponse(cancelTrans.refno),
+                                TradeErrorCode.BUSINESS_DEAL_ERROR, "暂不支持支付方式[${mainDtl.sourceType}]的流水撤销"))
             }
 
 
         } ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
-                .fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在"))
+                .fail(PayReverseResponse(),
+                        TradeErrorCode.BUSINESS_DEAL_ERROR, "流水不存在"))
     }
 
     /**
@@ -307,6 +320,9 @@
                 } else {
                     consumePayService.checkCanReverse(mainDtl.sourceType)
                 }
+            } else {
+                throw TransactionCheckException(TradeErrorCode.TRANSDTL_STATUS_ERROR,
+                        "该笔交易未定义sourcetype, 不支持退款")
             }
 
             val builder = TransactionBuilder().apply {
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 ad08dab..e2ac86c 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
@@ -310,6 +310,13 @@
         if (transaction.shop) {
             transaction.shopDtl.remark = remark
         }
+        if (transaction.reverseType != TradeDict.REVERSE_FLAG_NONE) {
+            val originTrans = transactionMainDao.findByRefnoNoLock(transaction.reverseRefno ?: "")
+                    ?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR,
+                            "系统异常，无法处理退款流水")
+            originTrans.reverseFlag = TradeDict.REVERSE_FLAG_NONE
+            transactionMainDao.save(originTrans)
+        }
         transaction.endTime = systemUtilService.sysdatetime.sysdate
         transactionMainDao.save(transaction)
         return transaction
@@ -358,8 +365,12 @@
         }
         transactionOnSuccess(transaction, sourcetypeRefno, false)
 
-        if(transaction.reverseRefno.isNotEmpty()){
-            //TODO:更新原流水信息
+        if (transaction.reverseType != TradeDict.REVERSE_FLAG_NONE) {
+            val originTrans = transactionMainDao.findByRefnoNoLock(transaction.reverseRefno ?: "")
+                    ?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR,
+                            "系统异常，无法处理退款流水")
+            originTrans.reverseFlag = transaction.reverseType
+            transactionMainDao.save(originTrans)
         }
 
         transaction.endTime = systemUtilService.sysdatetime.sysdate
@@ -381,17 +392,17 @@
             throw TransactionProcessException(TradeErrorCode.TRANSDTL_STATUS_ERROR,
                     "原流水不是成功状态")
         }
-        if (originTrans.reverseFlag != TradeDict.REVERSE_FLAG_NONE
-                || originTrans.reverseFlag != TradeDict.REVERSE_FLAG_REFUND) {
+        if (originTrans.reverseFlag != TradeDict.REVERSE_FLAG_NONE) {
             throw TransactionProcessException(TradeErrorCode.TRANSDTL_STATUS_ERROR,
-                    "原流水已被退款")
+                    "原流水已被退款或正在处理退款中")
         }
 
-        doReversePrepareAndCheck(originTrans, builder)
+        doReversePrepareAndCheck(originTrans, builder, refundAmount)
+        // 判断退款金额
         builder.preCheck()
         val transaction = doReverseProcess(originTrans, builder)
 
-        originTrans.reverseFlag = TradeDict.REVERSE_FLAG_REFUND
+        originTrans.reverseFlag = TradeDict.REVERSE_FLAG_WIP
         originTrans.refundAmount = refundAmount
         transactionMainDao.save(originTrans)
         return transaction
@@ -410,10 +421,10 @@
                     "原流水已被冲正")
         }
 
-        doReversePrepareAndCheck(originTrans, builder)
+        doReversePrepareAndCheck(originTrans, builder, 0.0)
         val transaction = doReverseProcess(originTrans, builder)
 
-        originTrans.reverseFlag = TradeDict.REVERSE_FLAG_CANCEL
+        originTrans.reverseFlag = TradeDict.REVERSE_FLAG_WIP
         transactionMainDao.save(originTrans)
         return transaction
     }
@@ -457,7 +468,8 @@
         return builderRecords(builder, TradeDict.DTL_STATUS_INIT)
     }
 
-    private fun doReversePrepareAndCheck(originTrans: TTransactionMain, builder: TransactionBuilder) {
+    private fun doReversePrepareAndCheck(originTrans: TTransactionMain, builder: TransactionBuilder,
+                                         amount: Double) {
         if (originTrans.person) {
             val account = accountUtilService.readAccount(originTrans.personDtl.userid)
             builder.person(account).apply {
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
deleted file mode 100644
index 326f44a..0000000
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/citizencard/service/citizencard_service.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.supwisdom.dlpay.citizencard.service
-
-import com.supwisdom.dlpay.api.bean.DlpayResp
-
-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, userid: String, accdate: String, amount: Int, refno: String): DlpayResp
-
-    fun cardPayRefund(refno: String, accdate: String, orignRefno: String, amount: Int): DlpayResp
-
-    fun queryResult(orignRefno: String): DlpayResp
-
-    fun getChkfilename(checkdate: String, merchantBankcardno: String?): DlpayResp
-
-}
\ No newline at end of file
