diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TAccount.java b/src/main/java/com/supwisdom/dlpay/api/domain/TAccount.java
index cc1b9c7..25fc46c 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TAccount.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TAccount.java
@@ -2,6 +2,7 @@
 
 import com.supwisdom.dlpay.framework.util.MD5;
 import com.supwisdom.dlpay.framework.util.MoneyUtil;
+import com.supwisdom.dlpay.framework.util.TradeDict;
 import org.hibernate.annotations.GenericGenerator;
 
 import javax.persistence.*;
@@ -11,7 +12,7 @@
 @Entity
 @Table(name = "TB_ACCOUNT",
     indexes = {@Index(name = "acc_userid_idx", columnList = "userid"),
-        @Index(name = "acc_status_idx", columnList = "status"),
+        @Index(name = "acc_status_idx", columnList = "transStatus"),
         @Index(name = "acc_subjno_uk", unique = true, columnList = "subjno,userid")})
 public class TAccount implements Serializable {
   @Id
@@ -29,8 +30,8 @@
   @Column(name = "USERID", nullable = false, length = 32)
   private String userid; //用户ID
 
-  @Column(name = "STATUS", nullable = false, length = 20)
-  private String status; //状态：normal-正常；closed-注销；locked-冻结
+  @Column(name = "TRANS_STATUS", nullable = false, length = 20)
+  private String transStatus = TradeDict.STATUS_NORMAL; //状态：normal-正常；closed-注销；locked-冻结
 
   @Column(name = "BALANCE", nullable = false, precision = 15, scale = 2)
   private Double balance; //总余额
@@ -79,11 +80,11 @@
   public TAccount() {
   }
 
-  public TAccount(String accname, String subjno, String userid, String status, Double balance, Double availbal, Double frozebal, Boolean lowfreeFlag, Double lowfreeLimit, Double daylimit, Double maxbal, Timestamp lasttranstime, Double lastdayTransamt, Double lastdayDpsamt, String tac, String opendate, String closedate) {
+  public TAccount(String accname, String subjno, String userid, String transStatus, Double balance, Double availbal, Double frozebal, Boolean lowfreeFlag, Double lowfreeLimit, Double daylimit, Double maxbal, Timestamp lasttranstime, Double lastdayTransamt, Double lastdayDpsamt, String tac, String opendate, String closedate) {
     this.accname = accname;
     this.subjno = subjno;
     this.userid = userid;
-    this.status = status;
+    this.transStatus = transStatus;
     this.balance = balance;
     this.availbal = availbal;
     this.frozebal = frozebal;
@@ -131,12 +132,12 @@
     this.userid = userid;
   }
 
-  public String getStatus() {
-    return status;
+  public String getTransStatus() {
+    return transStatus;
   }
 
-  public void setStatus(String status) {
-    this.status = status;
+  public void setTransStatus(String transStatus) {
+    this.transStatus = transStatus;
   }
 
   public Double getBalance() {
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java b/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
index d132e79..54591d4 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
@@ -1,5 +1,7 @@
 package com.supwisdom.dlpay.api.domain;
 
+import com.supwisdom.dlpay.framework.util.TradeDict;
+
 import javax.persistence.*;
 
 @Entity
@@ -33,7 +35,7 @@
   private String transtime;
 
   @Column(name = "STATUS", length = 20, nullable = false)
-  private String status;
+  private String status = TradeDict.DTL_STATUS_NONE;
 
   @Column(name = "BEFBAL", precision = 9, scale = 2)
   private Double befbal;
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java b/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java
index 604e7f5..e351fea 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.api.domain;
 
 import com.supwisdom.dlpay.framework.util.Subject;
+import com.supwisdom.dlpay.framework.util.TradeDict;
 
 import javax.persistence.*;
 
@@ -29,6 +30,9 @@
   @Column(name = "checkdate", length = 8)
   private String checkDate;
 
+  @Column(name = "transcode")
+  private Integer transCode;
+
   @Column(name = "person")
   private Boolean person = false;
 
@@ -39,7 +43,7 @@
   private Boolean subject = false;
 
   @Column(name = "status", length = 20)
-  private String status = "none";
+  private String status = TradeDict.DTL_STATUS_NONE;
 
   @Column(name = "sourcetype", length = 20)
   private String sourceType = "";
@@ -65,8 +69,18 @@
   @Column(name = "end_time")
   private Timestamp endTime;
 
+  @Column(name = "reverse_type", nullable = false)
+  private String reverseType = TradeDict.REVERSE_FLAG_NONE; // 流水标识， none - 正常交易流水， cancel - 撤销流水， refund - 退款流水
+
+  // 撤销、退款原流水参考号
+  @Column(name = "reverse_refno")
+  private String reverseRefno = "";
+
   @Column(name = "reverse_flag", nullable = false, length = 10)
-  private String reverseFlag = "none"; // 冲正标识， none - 未冲正, refund - 被退款, cancel - 被冲正
+  private String reverseFlag = TradeDict.REVERSE_FLAG_NONE; // 冲正标识， none - 未冲正, refund - 被退款, cancel - 被冲正
+
+  @Column(name = "refund_amount", nullable = false)
+  private Double refundAmount = 0.0;
 
   @OneToOne(targetEntity = TPersondtl.class, fetch = LAZY, cascade = CascadeType.ALL)
   @JoinColumn(name = "refno", referencedColumnName = "refno")
@@ -253,6 +267,38 @@
     this.sourceType = sourceType;
   }
 
+  public Integer getTransCode() {
+    return transCode;
+  }
+
+  public void setTransCode(Integer transCode) {
+    this.transCode = transCode;
+  }
+
+  public String getReverseType() {
+    return reverseType;
+  }
+
+  public void setReverseType(String reverseType) {
+    this.reverseType = reverseType;
+  }
+
+  public String getReverseRefno() {
+    return reverseRefno;
+  }
+
+  public void setReverseRefno(String reverseRefno) {
+    this.reverseRefno = reverseRefno;
+  }
+
+  public Double getRefundAmount() {
+    return refundAmount;
+  }
+
+  public void setRefundAmount(Double refundAmount) {
+    this.refundAmount = refundAmount;
+  }
+
   public Double sumAmountByAccno(String accno, String subjno,
                                  String debitOrCredit) {
     Double debitSum = 0.0;
diff --git a/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java b/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java
index bfa9047..16e429a 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java
@@ -48,7 +48,7 @@
 			try {
 				validate(request);
 			} catch (ValidateCodeException e) {
-				//response.setStatus(HttpStatus.OK.value());
+				//response.setTransStatus(HttpStatus.OK.value());
 				//response.setContentType("application/json;charset=UTF-8");
 				//response.getWriter().write(objectMapper.writeValueAsString(JsonResult.error(400, e.getMessage())));
 				//response.sendError(HttpStatus.UNAUTHORIZED.value(),e.getMessage());
diff --git a/src/main/java/com/supwisdom/dlpay/framework/security/MyAuthenticationFailureHandler.java b/src/main/java/com/supwisdom/dlpay/framework/security/MyAuthenticationFailureHandler.java
index e090b63..f18d092 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/security/MyAuthenticationFailureHandler.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/security/MyAuthenticationFailureHandler.java
@@ -39,7 +39,7 @@
     }
     setDefaultFailureUrl("/login");
     super.onAuthenticationFailure(request, response, new ValidateCodeException(errmsg));
-    /*response.setStatus(HttpStatus.OK.value());
+    /*response.setTransStatus(HttpStatus.OK.value());
     response.setContentType("application/json;charset=UTF-8");
     response.getWriter().write(objectMapper.writeValueAsString(JsonResult.error(400, errmsg)));*/
   }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
index 06def11..1d7b899 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
@@ -104,7 +104,7 @@
             account.setAccname(person.getName());
             account.setSubjno(Subject.SUBJNO_PERSONAL_DEPOSIT);
             account.setUserid(person.getUserid());
-            account.setStatus(person.getStatus());
+            account.setTransStatus(person.getStatus());
             account.setBalance(0.0);
             account.setAvailbal(0.0);
             account.setFrozebal(0.0);
@@ -123,7 +123,7 @@
     public JsonResult deleteUser(String userid) {
         TAccount account = accountDao.findByUserid(userid);
         if (account != null) {
-            if (!TradeDict.STATUS_CLOSED.equals(account.getStatus()) && account.getBalance() != 0) {
+            if (!TradeDict.STATUS_CLOSED.equals(account.getTransStatus()) && account.getBalance() != 0) {
                 return JsonResult.error("该用户账户未注销且余额不为0，无法删除");
             } else {
                 accountDao.delete(account);
@@ -146,7 +146,7 @@
         Optional<TAccount> opt = accountDao.findById(accno);
         if (opt.isPresent()) {
             TAccount acc = opt.get();
-            acc.setStatus(TradeDict.STATUS_CLOSED);
+            acc.setTransStatus(TradeDict.STATUS_CLOSED);
             accountDao.save(acc);
             return JsonResult.ok("操作成功");
         } else {
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt b/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
index cff556b..447a3f2 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
@@ -160,11 +160,11 @@
 
 class QueryDtlResultParam : APIRequestParam() {
     @Sign
-    var refno:String?=null //二选一
+    var refno: String? = null //二选一
     @Sign
-    var billno:String?=null //二选一 (billno+shopaccno） 传billno时，shopaccno必传
+    var billno: String? = null //二选一 (billno+shopaccno） 传billno时，shopaccno必传
     @Sign
-    var shopaccno: String?=null
+    var shopaccno: String? = null
 
     override fun checkParam(): Boolean {
         if (StringUtil.isEmpty(refno) && (StringUtil.isEmpty(billno) || StringUtil.isEmpty(shopaccno))) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "流水唯一号不能为空")
@@ -203,7 +203,7 @@
 
 class CitizenCardPayfinishParam : APIRequestParam() {
     @Sign
-    var refno:String=""
+    var refno: String = ""
 
     override fun checkParam(): Boolean {
         if (StringUtil.isEmpty(refno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "交易参考号不能为空")
@@ -242,7 +242,7 @@
         if (!DateUtil.checkDatetimeValid(transdate, DateUtil.DATE_FMT)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "交易日期错误[yyyyMMdd]")
         if (!DateUtil.checkDatetimeValid(transtime, DateUtil.TIME_FMT)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "交易时间错误[HHmmss]")
         if (StringUtil.isEmpty(stuempno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "一卡通唯一号不能为空")
-        if(!StringUtil.isEmpty(yktshopid) && !NumberUtil.isDigits(yktshopid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "一卡通商户号非整数")
+        if (!StringUtil.isEmpty(yktshopid) && !NumberUtil.isDigits(yktshopid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "一卡通商户号非整数")
 
         return true
     }
@@ -250,13 +250,13 @@
 
 class ConsumePayCancelParam : APIRequestParam() {
     @Sign
-    var refno:String? = null //流水号
+    var refno: String? = null //流水号
     @Sign
-    var billno:String?=null //订单号
+    var billno: String? = null //订单号
     @Sign
-    var shopaccno:String?=null //商户号
+    var shopaccno: String? = null //商户号
     @Sign
-    var requestbillno:String="" //退款请求唯一标识
+    var requestbillno: String = "" //退款请求唯一标识
     @Sign
     var transdate: String = "" //必传
     @Sign
@@ -272,6 +272,33 @@
     }
 }
 
+class ConsumePayRefundParam : APIRequestParam() {
+    @Sign
+    var refno: String? = null //流水号
+    @Sign
+    var billno: String? = null //订单号
+    @Sign
+    var shopaccno: String? = null //商户号
+
+    @Sign
+    var refundAmount: Int = 0 // 退款金额
+
+    @Sign
+    var requestbillno: String = "" //退款请求唯一标识
+    @Sign
+    var transdate: String = "" //必传
+    @Sign
+    var transtime: String = "" //必传
+
+    override fun checkParam(): Boolean {
+        if (StringUtil.isEmpty(refno) && (StringUtil.isEmpty(billno) || StringUtil.isEmpty(shopaccno))) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "原流水唯一号不能为空")
+        if (StringUtil.isEmpty(requestbillno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "撤销或退款流水号不能为空")
+        if (!DateUtil.checkDatetimeValid(transdate, DateUtil.DATE_FMT)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "交易日期错误[yyyyMMdd]")
+        if (!DateUtil.checkDatetimeValid(transtime, DateUtil.TIME_FMT)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "交易时间错误[HHmmss]")
+
+        return true
+    }
+}
 
 
 // ============================ RECHARGE ============================ //
@@ -305,10 +332,10 @@
 
 class CommonRechargeConfirmParam : APIRequestParam() {
     @Sign
-    var refno:String = "" //流水号
+    var refno: String = "" //流水号
 
     override fun checkParam(): Boolean {
-        if(StringUtil.isEmpty(refno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "流水号不能为空")
+        if (StringUtil.isEmpty(refno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "流水号不能为空")
 
         return true
     }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
index 414ad1b..4530820 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
@@ -5,15 +5,11 @@
 import com.supwisdom.dlpay.api.TransactionBuilder
 import com.supwisdom.dlpay.api.bean.*
 import com.supwisdom.dlpay.api.dao.TransactionMainDao
-import com.supwisdom.dlpay.api.domain.TAccount
 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.exception.RequestParamCheckException
-import com.supwisdom.dlpay.exception.TransactionException
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
-import com.supwisdom.dlpay.framework.domain.TShopacc
 import com.supwisdom.dlpay.framework.service.CommonService
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.Subject
@@ -22,13 +18,10 @@
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
-import org.springframework.security.core.Authentication
 import org.springframework.web.bind.annotation.PostMapping
 import org.springframework.web.bind.annotation.RequestBody
 import org.springframework.web.bind.annotation.RequestMapping
 import org.springframework.web.bind.annotation.RestController
-import javax.servlet.http.HttpServletRequest
-import javax.servlet.http.HttpServletResponse
 
 @RestController
 @RequestMapping("/api/consume")
@@ -42,12 +35,6 @@
     @Autowired
     lateinit var consumePayService: ConsumePayService
     @Autowired
-    lateinit var commonService: CommonService
-
-    @Autowired
-    lateinit var transactionMainDao: TransactionMainDao
-
-    @Autowired
     lateinit var transactionService: TransactionServiceProxy
 
     /**
@@ -252,9 +239,16 @@
     @PostMapping("/paycancel")
     fun payCancel(@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)
+            }
+            val cancelTrans = builder.cancelInit(it.refno, transactionService)
             //fixme: 撤销逻辑
-
-
+            if (it.sourceType.isNotEmpty()) {
+                // 第三方冲正
+            }
+            transactionService.success(cancelTrans.refno)
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .success("交易确认成功"))
         } ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
@@ -267,9 +261,23 @@
      * ============================================================================
      * */
     @PostMapping("/payrefund")
-    fun payRefund(@RequestBody param: ConsumePayCancelParam): ResponseEntity<Any> {
-        return ResponseEntity.ok(ResponseBodyBuilder.create()
-                .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "退款逻辑未实现"))
+    fun payRefund(@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)
+            }
+            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("交易确认成功"))
+        } ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
+                .fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在"))
     }
 
     /**
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
index 2c71695..1f9f468 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
@@ -1,6 +1,8 @@
 package com.supwisdom.dlpay.api.service.impl
 
+import com.supwisdom.dlpay.api.AccountProxy
 import com.supwisdom.dlpay.api.TransactionBuilder
+import com.supwisdom.dlpay.api.dao.AccountDao
 import com.supwisdom.dlpay.api.dao.TransactionMainDao
 import com.supwisdom.dlpay.api.domain.*
 import com.supwisdom.dlpay.api.repositories.AccountService
@@ -8,11 +10,12 @@
 import com.supwisdom.dlpay.api.service.TransactionService
 import com.supwisdom.dlpay.exception.TransactionCheckException
 import com.supwisdom.dlpay.exception.TransactionProcessException
+import com.supwisdom.dlpay.framework.dao.ShopaccDao
+import com.supwisdom.dlpay.framework.dao.SubjectDao
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.Subject
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
-import org.hibernate.Transaction
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
 import java.sql.SQLException
@@ -28,14 +31,23 @@
     private lateinit var accountService: AccountService
 
     @Autowired
+    private lateinit var accountDao: AccountDao
+
+    @Autowired
+    private lateinit var shopaccDao: ShopaccDao
+
+    @Autowired
+    private lateinit var subjectDao: SubjectDao
+
+    @Autowired
     private lateinit var systemUtilService: SystemUtilService
 
     @Autowired
     private lateinit var sourceTypeService: SourceTypeService
 
+    /// 公共函数部分
     private fun preCheck(builder: TransactionBuilder) {
         builder.preCheck()
-
     }
 
     private fun builderRecords(builder: TransactionBuilder, status: String): TTransactionMain {
@@ -53,8 +65,11 @@
                 createTime = systemUtilService.sysdatetime.sysdate
                 operid = builder.operId
                 opertype = builder.operType
-                reverseFlag = builder.tradeType
+                reverseFlag = builder.reverseType
                 checkable = sourceType.checkable
+                transCode = builder.transCode
+                reverseType = TradeDict.REVERSE_FLAG_NONE
+                refundAmount = 0.0
                 checkDate = null
                 settleDate = null
                 this.sourceType = sourceType.sourceType
@@ -210,14 +225,6 @@
         }
     }
 
-    override fun init(builder: TransactionBuilder): TTransactionMain {
-        return builderRecords(builder, TradeDict.DTL_STATUS_INIT)
-    }
-
-    override fun wip(builder: TransactionBuilder): TTransactionMain {
-        return builderRecords(builder, TradeDict.DTL_STATUS_WIP)
-    }
-
     private fun updateRecordStatus(transaction: TTransactionMain, status: String) {
         if (transaction.person) {
             transaction.personDtl?.also {
@@ -254,6 +261,16 @@
         transaction.status = status
     }
 
+    /////////////////////////////////////////////////////////////////////
+    // 业务接口
+    override fun init(builder: TransactionBuilder): TTransactionMain {
+        return builderRecords(builder, TradeDict.DTL_STATUS_INIT)
+    }
+
+    override fun wip(builder: TransactionBuilder): TTransactionMain {
+        return builderRecords(builder, TradeDict.DTL_STATUS_WIP)
+    }
+
     override fun wip(refno: String): TTransactionMain {
         val transaction = transactionMainDao.findByRefnoForUpdate(refno)
                 ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "流水<$refno>参考号错误")
@@ -272,11 +289,6 @@
         return fail(refno, "")
     }
 
-
-    override fun success(refno: String): TTransactionMain {
-        return success(refno, "")
-    }
-
     override fun fail(refno: String, remark: String): TTransactionMain {
         val transaction = transactionMainDao.findByRefnoForUpdate(refno)
                 ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "流水<$refno>参考号错误")
@@ -298,64 +310,8 @@
         return transaction
     }
 
-    override fun success(refno: String, remark: String): TTransactionMain {
-        val transaction = transactionMainDao.findByRefnoForUpdate(refno)
-                ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "参考号<$refno>错误，流水不存在")
-
-        val errorStatus = setOf(TradeDict.DTL_STATUS_SUCCESS, TradeDict.DTL_STATUS_CANCEL)
-        if (transaction.status in errorStatus) {
-            throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "流水<$refno>状态错误，流水已结束")
-        }
-        transaction.status = TradeDict.DTL_STATUS_SUCCESS
-        transaction.accdate = systemUtilService.accdate
-        transactionOnSuccess(transaction, remark, false)
-
-        transaction.endTime = systemUtilService.sysdatetime.sysdate
-        transactionMainDao.save(transaction)
-        return transaction
-    }
-
-    private fun preCheckRefund(transaction: TTransactionMain, amount: Double) {
-
-    }
-
-    override fun refund(originRefno: String): TTransactionMain {
-        val originTransation = transactionMainDao.findByRefnoForUpdate(originRefno)
-                ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS,
-                        "退款流水<$originRefno>不存在")
-
-        preCheckRefund(originTransation, 0.0)
-        TODO("")
-    }
-
-    override fun refundInit(originRefno: String): TTransactionMain {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
-    }
-
-    override fun refundConfirm(refno: String): TTransactionMain {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
-    }
-
-    override fun refundFail(refno: String): TTransactionMain {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
-    }
-
-    override fun cancel(originRefno: String): TTransactionMain {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
-    }
-
-    override fun cancelInit(originRefno: String): TTransactionMain {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
-    }
-
-    override fun cancelConfirm(refno: String): TTransactionMain {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
-    }
-
-    override fun cancelFail(refno: String): TTransactionMain {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
-    }
-
+    //////////////////////////////////////////////////////////////////
+    // 成功
     private fun transactionOnSuccess(transaction: TTransactionMain, remark: String, overdraft: Boolean) {
         if (transaction.person) {
             // update account balance
@@ -384,6 +340,106 @@
         }
     }
 
+    override fun success(refno: String, remark: String): TTransactionMain {
+        val transaction = transactionMainDao.findByRefnoForUpdate(refno)
+                ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "参考号<$refno>错误，流水不存在")
+
+        val errorStatus = setOf(TradeDict.DTL_STATUS_SUCCESS, TradeDict.DTL_STATUS_CANCEL)
+        if (transaction.status in errorStatus) {
+            throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "流水<$refno>状态错误，流水已结束")
+        }
+        transaction.status = TradeDict.DTL_STATUS_SUCCESS
+        transaction.accdate = systemUtilService.accdate
+        transactionOnSuccess(transaction, remark, false)
+
+        transaction.endTime = systemUtilService.sysdatetime.sysdate
+        transactionMainDao.save(transaction)
+        return transaction
+    }
+
+    override fun success(refno: String): TTransactionMain {
+        return success(refno, "")
+    }
+
+    //////////////////////////////////////////////////////////////////
+    // 回退业务接口，包括撤销和退款
+    override fun refundInit(originRefno: String, builder: TransactionBuilder): TTransactionMain {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun cancelInit(originRefno: String, builder: TransactionBuilder): TTransactionMain {
+        val originTrans = transactionMainDao.findByRefnoForUpdate(originRefno)
+                ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS
+                        , "被冲正流水不存在")
+        if (originTrans.status != TradeDict.DTL_STATUS_SUCCESS) {
+            throw TransactionProcessException(TradeErrorCode.TRANSDTL_STATUS_ERROR,
+                    "原流水不是成功状态")
+        }
+        if (originTrans.reverseFlag != TradeDict.REVERSE_FLAG_NONE) {
+            throw TransactionProcessException(TradeErrorCode.TRANSDTL_STATUS_ERROR,
+                    "原流水已被冲正")
+        }
+
+        doReversePreCheck(originTrans, builder)
+
+        builder.preCheck()
+        val transaction = doReverseProcess(originTrans, builder)
+
+        originTrans.reverseFlag = TradeDict.REVERSE_FLAG_CANCEL
+        transactionMainDao.save(originTrans)
+        return transaction
+    }
+
+    private fun getOppositeTradeFlag(flag: String): String {
+        return if (flag == TradeDict.TRADE_FLAG_IN) {
+            TradeDict.TRADE_FLAG_OUT
+        } else {
+            TradeDict.TRADE_FLAG_IN
+        }
+    }
+
+    private fun doReverseProcess(originTrans: TTransactionMain, builder: TransactionBuilder): TTransactionMain {
+
+        if (originTrans.person) {
+            builder.person().apply {
+                setAmount(-originTrans.personDtl.amount, getOppositeTradeFlag(originTrans.personDtl.tradeflag))
+                opposite = AccountProxy(builder.shop().shopacc)
+            }
+        }
+        if (originTrans.shop) {
+            builder.shop().apply {
+                setAmount(-originTrans.shopDtl.amount, getOppositeTradeFlag(originTrans.shopDtl.tradeflag))
+                opposite = AccountProxy(builder.person().person)
+            }
+        }
+        TODO("")
+//        originTrans.details.forEach {
+//            builder.addDebitCreditRecord()
+//        }
+    }
+
+    private fun doReversePreCheck(originTrans: TTransactionMain, builder: TransactionBuilder) {
+        if (originTrans.person) {
+            val account = accountDao.findByUserid(originTrans.personDtl.userid)
+                    ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS,
+                            "账户不存在")
+            builder.person(account)
+        }
+        if (originTrans.shop) {
+            val shopacc = shopaccDao.findByShopaccno(originTrans.shopDtl.shopaccno)
+                    ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS,
+                            "商户不存在")
+            builder.shop(shopacc)
+        }
+
+        if (originTrans.subject) {
+            val subject = subjectDao.findBySubjno(originTrans.subjectDtl.subjectno)
+                    ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS,
+                            "科目不存在")
+            builder.subject(subject)
+        }
+    }
+
     override fun repair(refno: String, remark: String): TTransactionMain {
         val transaction = transactionMainDao.findByRefnoForUpdate(refno)
                 ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS,
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
index 7c5f900..7d24186 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
@@ -61,7 +61,7 @@
                 accname = person.name
                 subjno = Subject.SUBJNO_PERSONAL_DEPOSIT
                 userid = person.userid
-                status = person.status
+                transStatus = person.status
                 balance = 0.0
                 availbal = 0.0
                 frozebal = 0.0
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
index b53672a..2eb1752 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
@@ -36,31 +36,13 @@
      * 退款类业务
      */
     @Transactional
-    fun refund(originRefno: String): TTransactionMain
-
-    @Transactional
-    fun refundInit(originRefno: String): TTransactionMain
-
-    @Transactional
-    fun refundConfirm(refno: String): TTransactionMain
-
-    @Transactional
-    fun refundFail(refno: String): TTransactionMain
+    fun refundInit(originRefno: String, builder: TransactionBuilder): TTransactionMain
 
     /**
      * 撤销业务
      */
     @Transactional
-    fun cancel(originRefno: String): TTransactionMain
-
-    @Transactional
-    fun cancelInit(originRefno: String): TTransactionMain
-
-    @Transactional
-    fun cancelConfirm(refno: String): TTransactionMain
-
-    @Transactional
-    fun cancelFail(refno: String): TTransactionMain
+    fun cancelInit(originRefno: String, builder: TransactionBuilder): TTransactionMain
 
     // 补帐接口
     @Transactional
@@ -94,10 +76,6 @@
         return transactionService.wip(refno)
     }
 
-    fun wip(builder: TransactionBuilder): TTransactionMain {
-        return transactionService.wip(builder)
-    }
-
     fun fail(refno: String): TTransactionMain {
         return transactionService.fail(refno)
     }
@@ -118,8 +96,12 @@
         return success(refno, "")
     }
 
-    fun cancel(refno: String): TTransactionMain {
-        TODO("not implementation")
+    fun cancel(originRefno: String, builder: TransactionBuilder, confirm: Boolean): TTransactionMain {
+        val trans = transactionService.cancelInit(originRefno, builder)
+        if (confirm) {
+            return success(trans.refno)
+        }
+        return trans
     }
 
     fun refund(originRefno: String, newRefno: String): TTransactionMain {
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt b/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
index 59c05bb..45831a5 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
@@ -175,19 +175,9 @@
         return this
     }
 
-    var tradeType: String = "none"
+    var reverseType: String = "none"
         private set
 
-    fun refund(): TransactionBuilder {
-        this.tradeType = TradeDict.REVERSE_FLAG_REFUND
-        return this
-    }
-
-    fun cancel(): TransactionBuilder {
-        this.tradeType = TradeDict.REVERSE_FLAG_CANCEL
-        return this
-    }
-
 
     // 以下属性可以在子表中不同
     var payinfo: String = ""
@@ -260,7 +250,7 @@
     }
 
     private fun checkAmount(amount: Double): Boolean {
-        return if (tradeType == TradeDict.REVERSE_FLAG_NONE) {
+        return if (reverseType == TradeDict.REVERSE_FLAG_NONE) {
             amount >= 0.0
         } else {
             amount <= 0.0
@@ -283,7 +273,7 @@
                     "交易码错误")
         }
 
-        if (tradeType !in VALID_REVERSEFLAG) {
+        if (reverseType !in VALID_REVERSEFLAG) {
             throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
                     "冲正标志错误")
         }
@@ -300,6 +290,10 @@
         }
         if (hasPerson()) {
             person().also {
+                if (it.person.transStatus != TradeDict.STATUS_NORMAL) {
+                    throw TransactionCheckException(TradeErrorCode.PERSON_STATUS_ERROR,
+                            "个人状态错误")
+                }
                 if (it.tradeFlag !in VALID_TRADEFLAG) {
                     throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
                             "个人交易收支方向错误")
@@ -321,6 +315,10 @@
 
         if (hasShop()) {
             shop().also {
+                if (it.shopacc.status != TradeDict.STATUS_NORMAL) {
+                    throw TransactionCheckException(TradeErrorCode.PERSON_STATUS_ERROR,
+                            "商户状态错误")
+                }
                 if (it.tradeFlag !in VALID_TRADEFLAG) {
                     throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
                             "商户交易收支方向错误")
@@ -341,15 +339,24 @@
         return transactionService.init(this)
     }
 
-    fun wip(transactionService: TransactionServiceProxy): TTransactionMain {
-        return transactionService.wip(this)
+    fun refund(originRefno: String, amount: Double, transactionService: TransactionServiceProxy): TTransactionMain {
+        this.reverseType = TradeDict.REVERSE_FLAG_REFUND
+        return transactionService.refund(originRefno, "")
     }
 
-    fun cancel(transactionService: TransactionServiceProxy, originRefno: String): TTransactionMain {
-        TODO("not implement")
+    fun refundInit(originRefno: String, amount: Double, transactionService: TransactionServiceProxy): TTransactionMain {
+        this.reverseType = TradeDict.REVERSE_FLAG_REFUND
+        return transactionService.refund(originRefno, "")
     }
 
-    fun refund(transactionService: TransactionServiceProxy, originRefno: String, amount: Double): TTransactionMain {
-        TODO("not implement")
+    fun cancel(originRefno: String, transactionService: TransactionServiceProxy): TTransactionMain {
+        this.reverseType = TradeDict.REVERSE_FLAG_CANCEL
+        return transactionService.cancel(originRefno, this, true)
     }
+
+    fun cancelInit(originRefno: String, transactionService: TransactionServiceProxy): TTransactionMain {
+        this.reverseType = TradeDict.REVERSE_FLAG_CANCEL
+        return transactionService.cancel(originRefno, this, false)
+    }
+
 }
diff --git a/src/main/resources/db/migration/V1.0__init_data.sql b/src/main/resources/db/migration/V1.0__init_data.sql
index 0d0cc5e..acc8d09 100644
--- a/src/main/resources/db/migration/V1.0__init_data.sql
+++ b/src/main/resources/db/migration/V1.0__init_data.sql
@@ -1,7 +1,7 @@
-insert into tb_apiclient(appid, secret, status, roles)
+insert into tb_apiclient(appid, secret, transStatus, roles)
 values ('100001', 'oUw2NmA09ficiVWD4TUQLDOkPyzQa3VzbjjsW0B2qTk=', 'normal', 'ROLE_THIRD_ADMIN');
 INSERT INTO tb_operator(
-	operid, closedate, opendate, opercode, opername, operpwd, opertype, status)
+	operid, closedate, opendate, opercode, opername, operpwd, opertype, transStatus)
 	VALUES ('LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', '20500101', '20190101', 'system', '系统管理员', '$2a$10$Ex9xp11.vCaD8D0a7ahiUOKqDij1TcCUBwRAmrqXeDvAkmzLibn4.', 'oper', 'normal');
 
 INSERT INTO tb_role(
diff --git a/src/main/resources/templates/system/dtl/shopdtl.html b/src/main/resources/templates/system/dtl/shopdtl.html
index 8cb48e7..536b7d9 100644
--- a/src/main/resources/templates/system/dtl/shopdtl.html
+++ b/src/main/resources/templates/system/dtl/shopdtl.html
@@ -45,7 +45,7 @@
                 <div class="layui-inline">
                     <label class="layui-form-label">状态</label>
                     <div class="layui-input-block">
-                        <select name="status" id="shopdtl-search-status" class="layui-select">
+                        <select name="transStatus" id="shopdtl-search-transStatus" class="layui-select">
                             <option value=""> 全部</option>
                             <option th:each="st:${dtlstatuslist}" th:value="${st.dictval}"
                                     th:text="${st.dictcaption}"></option>
@@ -181,7 +181,7 @@
                     sourcetype: $("#shopdtl-search-sourcetype").val(),
                     tradeflag: $("#shopdtl-search-tradeflag").val(),
                     transcode: $("#shopdtl-search-transcode").val(),
-                    status: $("#shopdtl-search-status").val()
+                    transStatus: $("#shopdtl-search-transStatus").val()
                 }, page: {curr: 1}
             });
         });
@@ -197,7 +197,7 @@
                 "sourcetype": "",
                 "tradeflag": "",
                 "transcode": "",
-                "status": ""
+                "transStatus": ""
             });
             form.render("select");
             treeSelect.revokeNode('shopdtl-search-shopaccno-filter');
@@ -216,17 +216,17 @@
                     {field: 'shopname', title: '商户名称', align: 'center', width: 250},
                     {field: 'amount', title: '交易金额', align: 'center', width: 120, sort: true},
                     {
-                        field: 'status', title: '状态', align: 'center', width: 90, templet: function (item) {
-                            if (item.status == 'init') {
+                        field: 'transStatus', title: '状态', align: 'center', width: 90, templet: function (item) {
+                            if (item.transStatus == 'init') {
                                 return '<span class="layui-badge layui-bg-gray">初始化</span>';
-                            } else if (item.status == 'success') {
+                            } else if (item.transStatus == 'success') {
                                 return '<span class="layui-badge layui-bg-green">成功</span>';
-                            } else if (item.status == 'fail') {
+                            } else if (item.transStatus == 'fail') {
                                 return '<span class="layui-badge">失败</span>';
-                            } else if (item.status == 'wip') {
+                            } else if (item.transStatus == 'wip') {
                                 return '<span class="layui-badge layui-bg-orange">待支付</span>';
                             } else {
-                                return item.status;
+                                return item.transStatus;
                             }
                         }
                     },
diff --git a/src/main/resources/templates/system/dtl/userdtl.html b/src/main/resources/templates/system/dtl/userdtl.html
index 943588e..4291d59 100644
--- a/src/main/resources/templates/system/dtl/userdtl.html
+++ b/src/main/resources/templates/system/dtl/userdtl.html
@@ -45,7 +45,7 @@
                 <div class="layui-inline">
                     <label class="layui-form-label">状态</label>
                     <div class="layui-input-block">
-                        <select name="status" id="userdtl-search-status" class="layui-select">
+                        <select name="transStatus" id="userdtl-search-transStatus" class="layui-select">
                             <option value=""> 全部</option>
                             <option th:each="st:${dtlstatuslist}" th:value="${st.dictval}"
                                     th:text="${st.dictcaption}"></option>
@@ -147,7 +147,7 @@
                     sourcetype: $("#userdtl-search-sourcetype").val(),
                     tradeflag: $("#userdtl-search-tradeflag").val(),
                     transcode: $("#userdtl-search-transcode").val(),
-                    status: $("#userdtl-search-status").val()
+                    transStatus: $("#userdtl-search-transStatus").val()
                 }, page: {curr: 1}
             });
         });
@@ -163,7 +163,7 @@
                 "sourcetype": "",
                 "tradeflag": "",
                 "transcode": "",
-                "status": ""
+                "transStatus": ""
             });
             form.render("select");
         });
@@ -181,17 +181,17 @@
                     {field: 'userName', title: '姓名', align: 'center', width: 150},
                     {field: 'amount', title: '交易金额', align: 'center', width: 120, sort: true},
                     {
-                        field: 'status', title: '状态', align: 'center', width: 90, templet: function (item) {
-                            if (item.status == 'init') {
+                        field: 'transStatus', title: '状态', align: 'center', width: 90, templet: function (item) {
+                            if (item.transStatus == 'init') {
                                 return '<span class="layui-badge layui-bg-gray">初始化</span>';
-                            } else if (item.status == 'success') {
+                            } else if (item.transStatus == 'success') {
                                 return '<span class="layui-badge layui-bg-green">成功</span>';
-                            } else if (item.status == 'fail') {
+                            } else if (item.transStatus == 'fail') {
                                 return '<span class="layui-badge">失败</span>';
-                            } else if (item.status == 'wip') {
+                            } else if (item.transStatus == 'wip') {
                                 return '<span class="layui-badge layui-bg-orange">待支付</span>';
                             } else {
-                                return item.status;
+                                return item.transStatus;
                             }
                         }
                     },
diff --git a/src/main/resources/templates/system/operator/index.html b/src/main/resources/templates/system/operator/index.html
index 6cbcf98..96ba2bc 100644
--- a/src/main/resources/templates/system/operator/index.html
+++ b/src/main/resources/templates/system/operator/index.html
@@ -31,10 +31,10 @@
 <script type="text/html" id="oper-tpl-state">
     {{# if(d.opercode == 'system') { }}
     <input type="checkbox" lay-filter="oper-tpl-state" value="{{d.operid}}" lay-skin="switch" lay-text="正常|注销"
-           {{d.status=='normal'?'checked':''}} disabled/>
+           {{d.transStatus=='normal'?'checked':''}} disabled/>
     {{# }else{ }}
     <input type="checkbox" lay-filter="oper-tpl-state" value="{{d.operid}}" lay-skin="switch" lay-text="正常|注销"
-           {{d.status=='normal'?'checked':''}} />
+           {{d.transStatus=='normal'?'checked':''}} />
     {{# } }}
 </script>
 
@@ -64,7 +64,7 @@
                     {type: 'numbers', fixed: 'left'},
                     {field: 'opercode', title: '管理员账号', fixed: 'left', sort: true},
                     {field: 'opername', title: '管理员名称', sort: true},
-                    {field: 'status', title: '状态', sort: true, width: 100, templet: '#oper-tpl-state'},
+                    {field: 'transStatus', title: '状态', sort: true, width: 100, templet: '#oper-tpl-state'},
                     {
                         field: 'sex', title: '性别', sort: true, width: 80, align: 'center', templet: function (item) {
                             if (item.sex == 'male') {
diff --git a/src/main/resources/templates/system/param/apiclientpara.html b/src/main/resources/templates/system/param/apiclientpara.html
index 4c8e214..d8292d7 100644
--- a/src/main/resources/templates/system/param/apiclientpara.html
+++ b/src/main/resources/templates/system/param/apiclientpara.html
@@ -29,7 +29,7 @@
 <!-- 表格状态列 -->
 <script type="text/html" id="api-tpl-state">
     <input type="checkbox" lay-filter="api-tpl-state" value="{{d.appid}}" lay-skin="switch" lay-text="启用|关闭"
-           {{d.status=='normal'?'checked':''}} />
+           {{d.transStatus=='normal'?'checked':''}} />
 </script>
 
 <script>
@@ -47,7 +47,7 @@
                 [
                     {field: 'appid', title: 'APPID', width: 120, align: 'right', fixed: 'left', sort: true},
                     {field: 'secret', title: '密钥', align: 'center', edit: 'text'},
-                    {field: 'status', title: '状态', width: 100, templet: '#api-tpl-state',sort: true},
+                    {field: 'transStatus', title: '状态', width: 100, templet: '#api-tpl-state',sort: true},
                     {field: 'roles', title: '角色', align: 'center' },
                     {align: 'center', title: '操作', width: 150, toolbar: '#apiclient-table-bar',  fixed: 'right'}
                 ]
diff --git a/src/main/resources/templates/system/user/account.html b/src/main/resources/templates/system/user/account.html
index b08eb5c..cd9cc57 100644
--- a/src/main/resources/templates/system/user/account.html
+++ b/src/main/resources/templates/system/user/account.html
@@ -36,12 +36,12 @@
                             }
                             return item.person.name;
                     }},
-                    {field: 'status', title: '状态',fixed: 'left',width: 80 , templet: function (item) {
-                            if (item.status == 'normal') {
+                    {field: 'transStatus', title: '状态',fixed: 'left',width: 80 , templet: function (item) {
+                            if (item.transStatus == 'normal') {
                                 return '<span class="layui-badge layui-bg-green">正常</span>'
-                            } else if (item.status == 'closed') {
+                            } else if (item.transStatus == 'closed') {
                                 return '<span class="layui-badge">注销</span>'
-                            } else if (item.status == 'locked') {
+                            } else if (item.transStatus == 'locked') {
                                 return '<span class="layui-badge layui-bg-orange">锁定</span>'
                             }  else {
                                 return '异常'
@@ -55,7 +55,7 @@
                     {field: 'opendate', title: '开户日期', width: 100,fixed: 'left', sort: true},
                     {
                         field: 'accno', align: 'center', title: '操作', fixed: 'right', templet: function (item) {
-                            if (item.status != 'closed') {
+                            if (item.transStatus != 'closed') {
                                 let html = ' <a class="layui-btn  layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>注销</a> ';
                                 return html;
                             }else {
@@ -107,7 +107,7 @@
                 }, function (ret) {
                     console.log(ret);
                     layer.closeAll('loading');
-                    if(ret.status==403){
+                    if(ret.transStatus==403){
                         layer.msg('没有权限', {icon: 2});
                     }else{
                         layer.msg('请求失败了，请稍后再试', {icon: 2});
diff --git a/src/main/resources/templates/system/user/index.html b/src/main/resources/templates/system/user/index.html
index df7a1d5..c035a36 100644
--- a/src/main/resources/templates/system/user/index.html
+++ b/src/main/resources/templates/system/user/index.html
@@ -41,12 +41,12 @@
                             }
                         }
                     },
-                    {field: 'status', title: '状态',fixed: 'left',width: 80 , templet: function (item) {
-                            if (item.status == 'normal') {
+                    {field: 'transStatus', title: '状态',fixed: 'left',width: 80 , templet: function (item) {
+                            if (item.transStatus == 'normal') {
                                 return '<span class="layui-badge layui-bg-green">正常</span>'
-                            } else if (item.status == 'closed') {
+                            } else if (item.transStatus == 'closed') {
                                 return '<span class="layui-badge">注销</span>'
-                            } else if (item.status == 'locked') {
+                            } else if (item.transStatus == 'locked') {
                                 return '<span class="layui-badge layui-bg-orange">锁定</span>'
                             }  else {
                                 return '异常'
@@ -142,7 +142,7 @@
                 }, function (ret) {
                     console.log(ret);
                     layer.closeAll('loading');
-                    if(ret.status==403){
+                    if(ret.transStatus==403){
                         layer.msg('没有权限', {icon: 2});
                     }else{
                         layer.msg('请求失败了，请稍后再试', {icon: 2});
diff --git a/src/main/resources/templates/system/user/point.html b/src/main/resources/templates/system/user/point.html
index f588110..f14be80 100644
--- a/src/main/resources/templates/system/user/point.html
+++ b/src/main/resources/templates/system/user/point.html
@@ -84,7 +84,7 @@
                 }, function (ret) {
                     console.log(ret);
                     layer.closeAll('loading');
-                    if(ret.status==403){
+                    if(ret.transStatus==403){
                         layer.msg('没有权限', {icon: 2});
                     }else{
                         layer.msg('请求失败了，请稍后再试', {icon: 2});
diff --git a/src/main/resources/templates/system/user/pointdtl.html b/src/main/resources/templates/system/user/pointdtl.html
index 9be6caf..07448c0 100644
--- a/src/main/resources/templates/system/user/pointdtl.html
+++ b/src/main/resources/templates/system/user/pointdtl.html
@@ -85,7 +85,7 @@
                 }, function (ret) {
                     console.log(ret);
                     layer.closeAll('loading');
-                    if(ret.status==403){
+                    if(ret.transStatus==403){
                         layer.msg('没有权限', {icon: 2});
                     }else{
                         layer.msg('请求失败了，请稍后再试', {icon: 2});
