删除原来的记账模块,并注释部分未兼容新记账模块的代码
diff --git a/src/main/java/com/supwisdom/dlpay/api/dao/UserdtlBusinessDao.java b/src/main/java/com/supwisdom/dlpay/api/dao/UserdtlBusinessDao.java
deleted file mode 100644
index 347e79a..0000000
--- a/src/main/java/com/supwisdom/dlpay/api/dao/UserdtlBusinessDao.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.supwisdom.dlpay.api.dao;
-
-import com.supwisdom.dlpay.api.domain.TUserdtlBusiness;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface UserdtlBusinessDao extends JpaRepository<TUserdtlBusiness, String> {
-  TUserdtlBusiness getByRefno(String refno);
-}
diff --git a/src/main/java/com/supwisdom/dlpay/api/dao/UserdtlDao.java b/src/main/java/com/supwisdom/dlpay/api/dao/UserdtlDao.java
deleted file mode 100644
index 007cff7..0000000
--- a/src/main/java/com/supwisdom/dlpay/api/dao/UserdtlDao.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.supwisdom.dlpay.api.dao;
-
-import com.supwisdom.dlpay.api.domain.TUserdtl;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Lock;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.jpa.repository.QueryHints;
-import org.springframework.stereotype.Repository;
-
-import javax.persistence.LockModeType;
-import javax.persistence.QueryHint;
-
-@Repository
-public interface UserdtlDao extends JpaRepository<TUserdtl, String> {
-  TUserdtl findByRefno(String refno);
-
-  @Lock(LockModeType.PESSIMISTIC_WRITE)
-  @Query("select dtl from TUserdtl  dtl where dtl.refno = ?1")
-  TUserdtl findByRefnoForUpdate(String refno);
-
-  @Lock(LockModeType.PESSIMISTIC_WRITE)
-  @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value ="0")})
-  @Query("select dtl from TUserdtl  dtl where dtl.refno = ?1")
-  TUserdtl findByRefnoForUpdateNowait(String refno);
-
-  @Lock(LockModeType.PESSIMISTIC_WRITE)
-  @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value ="0")})
-  @Query("select dtl from TUserdtl dtl where dtl.outtradeno = ?1 and dtl.shopaccno=?2 ")
-  TUserdtl findByBillnoForUpdateNowait(String billno,String shopaccno);
-
-  TUserdtl findByOuttradenoAndShopaccno(String outtradeno,String shopaccno);
-}
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TSubjectdtl.java b/src/main/java/com/supwisdom/dlpay/api/domain/TSubjectdtl.java
index dc3fe04..3fd3be2 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TSubjectdtl.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TSubjectdtl.java
@@ -3,7 +3,7 @@
 import javax.persistence.*;
 
 @Entity
-@Table(name = "TB_SUBJECtDTL",
+@Table(name = "TB_SUBJECTDTL",
     indexes = {@Index(name = "subjdtl_accdate", columnList = "accdate"),
         @Index(name = "subjdtl_subjno", columnList = "subjno")})
 public class TSubjectdtl {
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TUserdtl.java b/src/main/java/com/supwisdom/dlpay/api/domain/TUserdtl.java
deleted file mode 100644
index 694e7a9..0000000
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TUserdtl.java
+++ /dev/null
@@ -1,258 +0,0 @@
-package com.supwisdom.dlpay.api.domain;
-
-import javax.persistence.*;
-
-@Entity
-@Table(name = "TB_USERDTL",
-    indexes = {@Index(name = "userdtl_transdate_idx", columnList = "transdate"),
-        @Index(name = "userdtl_accdate_idx", columnList = "accdate"),
-        @Index(name = "userdtl_status_idx", columnList = "status"),
-        @Index(name = "userdtl_reverse_idx", columnList = "REVERSE_FLAG"),
-        @Index(name = "userdtl_outtradeno_uk", unique = true, columnList = "outtradeno,shopaccno")})
-public class TUserdtl {
-  @Id
-  @Column(name = "REFNO", nullable = false, length = 32)
-  private String refno; //流水号
-
-  @Column(name = "ACCDATE", length = 8)
-  private String accdate; //记账日期
-
-  @Column(name = "USERID", length = 32)
-  private String userid;  //用户ID,或账号
-
-  @Column(name = "TRANSDATE", length = 8)
-  private String transdate;
-
-  @Column(name = "TRANSTIME", length = 6)
-  private String transtime;
-
-  @Column(name = "STATUS", length = 20)
-  private String status;
-
-  @Column(name = "BEFBAL", precision = 9, scale = 2)
-  private Double befbal;
-
-  @Column(name = "AMOUNT", precision = 9, scale = 2)
-  private Double amount; //实际付款金额
-
-  @Column(name = "TOTAL_AMOUNT", precision = 9, scale = 2)
-  private Double totalAmount; //订单总金额
-
-  @Column(name = "AFTBAL", precision = 9, scale = 2)
-  private Double aftbal;
-
-  @Column(name = "PAYTYPE", length = 20)
-  private String paytype; //支付方式 balance,wechat,alipay
-
-  @Column(name = "PAYINFO", length = 200)
-  private String payinfo; //记录支付信息备用字段
-
-  @Column(name = "TRANSCODE", precision = 4)
-  private Integer transcode;
-
-  @Column(name = "TRANSDESC", length = 240)
-  private String transdesc; //交易描述
-
-  @Column(name = "OUTTRADENO", length = 60)
-  private String outtradeno; //第三方流水号
-
-  @Column(name = "SHOPACCNO", length = 20)
-  private String shopaccno;
-
-  @Column(name = "OPERID", precision = 9)
-  private Integer operid; //操作员ID
-
-  @Column(name = "REVERSE_FLAG", nullable = false, precision = 1)
-  private String reverseFlag = "none"; //none, cancel, reversed
-
-  @Column(name = "REVERSE_AMOUNT", precision = 9, scale = 2)
-  private Double reverseAmount = 0D; //撤销金额填写
-
-  @Column(name = "TRADEFLAG", nullable = false, precision = 1)
-  private Integer tradeflag; //1-充值;2-消费
-
-  @Column(name = "REMARK", length = 240)
-  private String remark;
-
-  @Column(name = "CREATETIME", length = 14)
-  private String createtime;  //创建时间
-
-  @Column(name = "ENDTIME", length = 14)
-  private String endtime;  //支付结束时间
-
-  public String getRefno() {
-    return refno;
-  }
-
-  public void setRefno(String refno) {
-    this.refno = refno;
-  }
-
-  public String getAccdate() {
-    return accdate;
-  }
-
-  public void setAccdate(String accdate) {
-    this.accdate = accdate;
-  }
-
-  public String getUserid() {
-    return userid;
-  }
-
-  public void setUserid(String userid) {
-    this.userid = userid;
-  }
-
-  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 String getStatus() {
-    return status;
-  }
-
-  public void setStatus(String status) {
-    this.status = status;
-  }
-
-  public Double getBefbal() {
-    return befbal;
-  }
-
-  public void setBefbal(Double befbal) {
-    this.befbal = befbal;
-  }
-
-  public Double getAmount() {
-    return amount;
-  }
-
-  public void setAmount(Double amount) {
-    this.amount = amount;
-  }
-
-  public Double getAftbal() {
-    return aftbal;
-  }
-
-  public void setAftbal(Double aftbal) {
-    this.aftbal = aftbal;
-  }
-
-  public String getPaytype() {
-    return paytype;
-  }
-
-  public void setPaytype(String paytype) {
-    this.paytype = paytype;
-  }
-
-  public String getPayinfo() {
-    return payinfo;
-  }
-
-  public void setPayinfo(String payinfo) {
-    this.payinfo = payinfo;
-  }
-
-  public Integer getTranscode() {
-    return transcode;
-  }
-
-  public void setTranscode(Integer transcode) {
-    this.transcode = transcode;
-  }
-
-  public String getTransdesc() {
-    return transdesc;
-  }
-
-  public void setTransdesc(String transdesc) {
-    this.transdesc = transdesc;
-  }
-
-  public String getOuttradeno() {
-    return outtradeno;
-  }
-
-  public void setOuttradeno(String outtradeno) {
-    this.outtradeno = outtradeno;
-  }
-
-  public String getShopaccno() {
-    return shopaccno;
-  }
-
-  public void setShopaccno(String shopaccno) {
-    this.shopaccno = shopaccno;
-  }
-
-  public Integer getOperid() {
-    return operid;
-  }
-
-  public void setOperid(Integer operid) {
-    this.operid = operid;
-  }
-
-  public String getReverseFlag() {
-    return reverseFlag;
-  }
-
-  public void setReverseFlag(String reverseFlag) {
-    this.reverseFlag = reverseFlag;
-  }
-
-  public Double getReverseAmount() {
-    return reverseAmount;
-  }
-
-  public void setReverseAmount(Double reverseAmount) {
-    this.reverseAmount = reverseAmount;
-  }
-
-  public Integer getTradeflag() {
-    return tradeflag;
-  }
-
-  public void setTradeflag(Integer tradeflag) {
-    this.tradeflag = tradeflag;
-  }
-
-  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 getEndtime() {
-    return endtime;
-  }
-
-  public void setEndtime(String endtime) {
-    this.endtime = endtime;
-  }
-}
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TUserdtlBusiness.java b/src/main/java/com/supwisdom/dlpay/api/domain/TUserdtlBusiness.java
deleted file mode 100644
index 42ed8ca..0000000
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TUserdtlBusiness.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.supwisdom.dlpay.api.domain;
-
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
-import com.supwisdom.dlpay.framework.util.StringUtil;
-
-import javax.persistence.*;
-import java.util.HashMap;
-import java.util.Map;
-
-@Entity
-@Table(name = "TB_USERDTL_BUSINESS")
-public class TUserdtlBusiness {
-  @Id
-  @Column(name = "REFNO", nullable = false, length = 32)
-  private String refno;
-
-  @Column(name = "JSON_CONTENT", length = 1000)
-  private String jsonContent;
-
-  @Transient
-  private static final Gson gsonUtil = new Gson();
-
-  public TUserdtlBusiness() {
-  }
-
-  public TUserdtlBusiness(String refno, String jsonContent) {
-    this.refno = refno;
-    this.jsonContent = jsonContent;
-  }
-
-  public TUserdtlBusiness(String refno, Map<String, String> map) {
-    this.refno = refno;
-    if (null == map || map.isEmpty()) {
-      this.jsonContent = "";
-    } else {
-      this.jsonContent = gsonUtil.toJson(map);
-    }
-  }
-
-  public String getRefno() {
-    return refno;
-  }
-
-  public void setRefno(String refno) {
-    this.refno = refno;
-  }
-
-  public String getJsonContent() {
-    return jsonContent;
-  }
-
-  public void setJsonContent(String jsonContent) {
-    this.jsonContent = jsonContent;
-  }
-
-  public Map<String, String> getContentMap() {
-    Map<String, String> map = new HashMap<>(0);
-    if (!StringUtil.isEmpty(this.jsonContent))
-      map = gsonUtil.fromJson(this.jsonContent, new TypeToken<Map<String, String>>() {
-      }.getType());
-    return map;
-  }
-}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt b/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt
index 3a03934..3b5bd5e 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt
@@ -7,8 +7,8 @@
 import com.supwisdom.dlpay.api.bean.SupStatusRevResp
 import com.supwisdom.dlpay.api.bean.SupYktResp
 import com.supwisdom.dlpay.api.bean.WechatReqResp
+import com.supwisdom.dlpay.api.domain.TPersondtl
 import com.supwisdom.dlpay.api.domain.TShopdtl
-import com.supwisdom.dlpay.api.domain.TUserdtl
 import com.supwisdom.dlpay.framework.util.*
 import com.supwisdom.dlpay.util.Code
 
@@ -24,7 +24,7 @@
 class CallService {
 
     companion object {
-        fun callYktPay(config: Map<String, String?>, paydtl: TUserdtl, time: String, stuempno: String, yktshopid: String, devphyid: String?): CallBackResp {
+        fun callYktPay(config: Map<String, String?>, paydtl: TPersondtl, time: String, stuempno: String, yktshopid: String, devphyid: String?): CallBackResp {
             val code = CallBackResp()
             val appid = config["appid"]
             if (appid.isNullOrEmpty()) {
@@ -104,7 +104,7 @@
             return code
         }
 
-        fun callWechatPay(config: Map<String, String>, paydtl: TUserdtl, time: String, wechattype: String,
+        fun callWechatPay(config: Map<String, String>, paydtl: TPersondtl, time: String, wechattype: String,
                           realip: String?, qrcode: String?, openid: String?): BaseResp {
             val code = BaseResp()
             val appid = config["appid"]
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/comsume_builder.kt b/src/main/kotlin/com/supwisdom/dlpay/api/comsume_builder.kt
deleted file mode 100644
index 0304141..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/api/comsume_builder.kt
+++ /dev/null
@@ -1,373 +0,0 @@
-package com.supwisdom.dlpay.api
-
-import com.supwisdom.dlpay.api.domain.TAccount
-import com.supwisdom.dlpay.api.domain.TPerson
-import com.supwisdom.dlpay.api.domain.TUserdtl
-import com.supwisdom.dlpay.api.service.AccountUtilServcie
-import com.supwisdom.dlpay.api.service.PersonBalancePayService
-import com.supwisdom.dlpay.exception.TransactionCheckException
-import com.supwisdom.dlpay.framework.domain.TFeetypeConfig
-import com.supwisdom.dlpay.framework.domain.TShopacc
-import com.supwisdom.dlpay.framework.domain.TSubject
-import com.supwisdom.dlpay.framework.util.*
-
-class AccountHolder<T> private constructor(val accountId: String, val idType: Int) {
-    companion object {
-        const val IDTYPE_PERSON = 1
-        const val IDTYPE_SHOP = 2
-        const val IDTYPE_SUBJECT = 3
-        const val IDTYPE_FEETYPE = 4
-
-        fun person(userid: String): AccountHolder<TAccount> {
-            return AccountHolder(userid, IDTYPE_PERSON)
-        }
-
-        fun shop(shopid: String): AccountHolder<TShopacc> {
-            return AccountHolder(shopid, IDTYPE_SHOP)
-        }
-
-        fun subject(subjNo: String): AccountHolder<TSubject> {
-            return AccountHolder(subjNo, IDTYPE_SUBJECT)
-        }
-
-        fun feetype(feetype: String, paytype: String): AccountHolder<TFeetypeConfig> {
-            return AccountHolder("$feetype@$paytype", IDTYPE_FEETYPE)
-        }
-    }
-
-    internal lateinit var builder: PersonTransBuilder
-
-    internal val childrenHolder = mutableListOf<AccountHolder<*>>()
-
-
-    fun <U> with(holder: AccountHolder<U>): AccountHolder<T> {
-        holder.builder = this.builder
-        childrenHolder.add(holder)
-        return this
-    }
-
-    @Suppress("UNCHECKED_CAST", "IMPLICIT_CAST_TO_ANY")
-    fun <T> get(): T {
-        return when (idType) {
-            IDTYPE_PERSON -> builder.accountUtil.readAccountForUpdateNowait(accountId)
-            IDTYPE_SHOP -> builder.accountUtil.readShopAcc(accountId.toInt())
-            IDTYPE_SUBJECT -> builder.accountUtil.readSubject(accountId)
-            IDTYPE_FEETYPE -> builder.accountUtil.readFeetype(accountId.split("@")[0], accountId.split("@")[1])
-            else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "账户类型未知type<$idType>")
-        } as T
-    }
-
-    @Suppress("UNCHECKED_CAST", "IMPLICIT_CAST_TO_ANY")
-    fun <T> withLock(): T {
-        return when (idType) {
-            IDTYPE_PERSON -> builder.accountUtil.readAccountForUpdateNowait(accountId)
-            IDTYPE_SHOP -> builder.accountUtil.readShopAcc(accountId.toInt())
-            IDTYPE_SUBJECT -> builder.accountUtil.readSubject(accountId)
-            IDTYPE_FEETYPE -> builder.accountUtil.readFeetype(accountId.split("@")[0], accountId.split("@")[1])
-            else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "账户类型未知type<$idType>")
-        } as T
-    }
-}
-
-class PersonTransBuilder private constructor(accUitl: AccountUtilServcie) {
-    companion object {
-        fun newBuilder(accUitl: AccountUtilServcie) = PersonTransBuilder(accUitl)
-    }
-
-    inner class TransDetail(val debitAccNo: String, val debitSubjNo: String,
-                            val creditAccNo: String, val creditSubjNo: String,
-                            val amount: Double, val summary: String,
-                            val rowno: Int)
-
-    ///////////////////////////////////////////////////////////////////////////////
-    // 以下为输入参数,调用接口时指定的参数值
-    lateinit var person: TPerson
-    lateinit var tradetype: Tradetype
-    lateinit var refno: String
-    lateinit var status: String
-    lateinit var shopaccno: String
-    val extendMap = mutableMapOf<String, String>() //存调第三方需要的参数信息
-    val resultMap = mutableMapOf<String, String>() //存调第三方结果数据
-
-    var transcode = 0
-
-    var transDate = ""
-    var transTime = ""
-    /**
-     * 是否允许透支
-     */
-    var overdraft = false
-    var description = ""
-
-    /**
-     * 支付方式
-     * */
-    var paytype = ""  //枚举?
-    var payinfo = ""
-
-    /**
-     * 外部流水号
-     * */
-    var outtradeno = "" //发起支付系统的流水号(对接系统根据此流水号查询本地流水对账)
-
-    var tryLockAccount = false
-
-    ////////////////////////////////////////////////////////////////////////////////////
-    // 以下为内部参数,不需要调用者处理
-    val details = mutableListOf<TransDetail>()
-    var amount: Double = 0.0
-    var accountUtil = accUitl
-
-    /////////////////////////////////////////////
-
-    fun setOwner(per: TPerson): PersonTransBuilder {
-        this.person = per
-        return this
-    }
-
-    fun enableOverdraft(b: Boolean = false): PersonTransBuilder {
-        this.overdraft = b
-        return this
-    }
-
-    fun setTransDatetime(date: String, time: String): PersonTransBuilder {
-        this.transDate = date
-        this.transTime = time
-        return this
-    }
-
-    fun setTransinfo(transcode: Int, description: String): PersonTransBuilder {
-        this.transcode = transcode
-        this.description = description
-        return this
-    }
-
-    fun selectPaytype(paytype: String, payinfo: String): PersonTransBuilder {
-        this.paytype = paytype
-        this.payinfo = payinfo
-        return this
-    }
-
-    fun setOuttradeno(outtradeno: String): PersonTransBuilder {
-        this.outtradeno = outtradeno
-        return this
-    }
-
-    fun chooseTradetype(tradetype: Tradetype): PersonTransBuilder {
-        this.tradetype = tradetype
-        return this
-    }
-
-    fun tryLock(lock: Boolean): PersonTransBuilder {
-        this.tryLockAccount = lock
-        return this
-    }
-
-    fun setRefno(refno: String): PersonTransBuilder {
-        this.refno = refno
-        return this
-    }
-
-    fun addExtendParam(key: String, value: String): PersonTransBuilder {
-        this.extendMap.plus(mapOf(key to value))
-        return this
-    }
-
-    fun addExtendParam(param: Map<String, String>): PersonTransBuilder {
-        this.extendMap.plus(param)
-        return this
-    }
-
-    fun addResult(key: String, value: String): PersonTransBuilder {
-        this.resultMap.plus(mapOf(key to value))
-        return this
-    }
-
-    fun addResult(param: Map<String, String>): PersonTransBuilder {
-        this.resultMap.plus(param)
-        return this
-    }
-
-    private fun prepareData() {
-        if (transcode == 0) {
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定交易码")
-        }
-
-        // fixme : 是否要检查 recharge , consume 之外的类型
-        when (this.tradetype) {
-            //充值必须指明用户和支付方式
-            Tradetype.RECHARGE -> {
-                if (StringUtil.isEmpty(this.paytype))
-                    throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定充值方式")
-            }
-
-            //消费
-            Tradetype.CONSUME -> {
-                if (StringUtil.isEmpty(this.paytype))
-                    this.paytype = TradeDict.PAYTYPE_BALANCE   //默认余额支付
-            }
-        }
-
-        if (this.details.size < 1) {
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定交易明细")
-        }
-
-        amount = this.details.sumByDouble { detail ->
-            detail.amount
-        }
-
-        if (!StringUtil.isEmpty(this.transDate) &&
-                !DateUtil.checkDatetimeValid(this.transDate, "yyyyMMdd")) {
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易日期格式错误[yyyyMMdd]")
-        }
-        if (!StringUtil.isEmpty(this.transTime) &&
-                !DateUtil.checkDatetimeValid(this.transTime, "HHmmss")) {
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易时间格式错误[HHmmss]")
-        }
-
-        if (StringUtil.isEmpty(this.outtradeno)) {
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未传递外部流水号")
-        }
-
-
-    }
-
-    private fun preCheckAccount() {
-        when (person.status) {
-            TradeDict.STATUS_CLOSED ->
-                throw TransactionCheckException(TradeErrorCode.PERSON_STATUS_ERROR, "用户已注销")
-            TradeDict.STATUS_LOCKED ->
-                throw TransactionCheckException(TradeErrorCode.PERSON_STATUS_ERROR, "用户已冻结锁定")
-        }
-    }
-
-    @Suppress("UNCHECKED_CAST", "IMPLICIT_CAST_TO_ANY")
-    fun <U> getAccountAndSubjNo(holder: AccountHolder<U>): Pair<String, String> {
-        return if (this.tryLockAccount) {
-            when (holder.idType) {
-                AccountHolder.IDTYPE_PERSON -> holder.withLock<TAccount>().let {
-                    it.accno to it.subjno
-                }
-                AccountHolder.IDTYPE_SHOP -> holder.withLock<TShopacc>().let {
-                    if (this.shopaccno.isEmpty()) {
-                        this.shopaccno = it.shopaccno
-                    }
-                    it.shopaccno to it.subjno
-                }
-                AccountHolder.IDTYPE_SUBJECT -> holder.withLock<TSubject>().let {
-                    it.subjno to it.subjno
-                }
-                else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "不支持的账户类型")
-            }
-        } else {
-            when (holder.idType) {
-                AccountHolder.IDTYPE_PERSON -> holder.get<TAccount>().let {
-                    it.accno to it.subjno
-                }
-                AccountHolder.IDTYPE_SHOP -> holder.get<TShopacc>().let {
-                    if (this.shopaccno.isEmpty()) {
-                        this.shopaccno = it.shopaccno
-                    }
-                    it.shopaccno to it.subjno
-                }
-                AccountHolder.IDTYPE_SUBJECT -> holder.get<TSubject>().let {
-                    it.subjno to it.subjno
-                }
-                else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "不支持的账户类型")
-            }
-        }
-    }
-
-    fun <T, U> addDetail(debit: AccountHolder<T>, credit: AccountHolder<U>,
-                         amount: Double, summary: String): PersonTransBuilder {
-        debit.builder = this
-        credit.builder = this
-
-        var debitAccNo: String
-        var debitSubjNo: String
-        getAccountAndSubjNo(debit).apply {
-            debitAccNo = first
-            debitSubjNo = second
-        }
-        var creditAccNo: String
-        var creditSubjNo: String
-        getAccountAndSubjNo(credit).apply {
-            creditAccNo = first
-            creditSubjNo = second
-        }
-        this.details.add(TransDetail(debitAccNo, debitSubjNo, creditAccNo, creditSubjNo,
-                amount, summary, this.details.size + 1))
-        return this
-    }
-
-    fun addDetail(accountHolder: AccountHolder<TFeetypeConfig>,
-                  amount: Double): PersonTransBuilder {
-        accountHolder.builder = this
-        val transtype = accountHolder.get<TFeetypeConfig>()
-
-        var debitAccNo = ""
-        var debitSubjNo = ""
-
-        var creditAccNo = ""
-        var creditSubjNo = ""
-
-        accountHolder.childrenHolder.map {
-            getAccountAndSubjNo(it)
-        }.forEach {
-            if (it.second == transtype.drsubjno) {
-                debitAccNo = it.first
-                debitSubjNo = it.second
-            } else if (it.second == transtype.crsubjno) {
-                creditAccNo = it.first
-                creditSubjNo = it.second
-            }
-        }
-
-        if (debitAccNo.isEmpty()) {
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
-                    "交易配置<${transtype.feetype}@${transtype.paytype}> 借方账号配置错误")
-        }
-        if (creditAccNo.isEmpty()) {
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
-                    "交易配置<${transtype.feetype}@${transtype.paytype}> 贷方账号配置错误")
-        }
-        this.details.add(TransDetail(debitAccNo, debitSubjNo, creditAccNo, creditSubjNo,
-                amount, transtype.summary, this.details.size + 1))
-        return this
-    }
-
-    /**
-     * 一步交易完成
-     */
-    fun done(service: PersonBalancePayService): TUserdtl {
-        prepareData()
-        preCheckAccount()
-        return service.process(this)
-    }
-
-    fun init(service: PersonBalancePayService): TUserdtl {
-        prepareData()
-        preCheckAccount()
-        return service.init(this)
-    }
-
-    fun wip(service: PersonBalancePayService): TUserdtl {
-        if (this.refno.isEmpty())
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易参考号<refno>未指定")
-        return service.wip(this)
-    }
-
-    fun finish(service: PersonBalancePayService, status: String): TUserdtl {
-        if (this.refno.isEmpty())
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易参考号<refno>未指定")
-        this.status = status
-        return service.finish(this)
-    }
-
-    fun success(service: PersonBalancePayService): TUserdtl {
-        if (this.refno.isEmpty())
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易参考号<refno>未指定")
-        this.status = TradeDict.DTL_STATUS_SUCCESS
-        return service.finish(this)
-    }
-}
\ No newline at end of file
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 bfa6eac..873aa8f 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
@@ -1,26 +1,29 @@
 package com.supwisdom.dlpay.api.controller
 
-import com.supwisdom.dlpay.api.*
+import com.supwisdom.dlpay.api.AccountProxy
+import com.supwisdom.dlpay.api.CallService
+import com.supwisdom.dlpay.api.TransactionBuilder
 import com.supwisdom.dlpay.api.bean.*
 import com.supwisdom.dlpay.api.domain.TAccount
-import com.supwisdom.dlpay.api.service.*
+import com.supwisdom.dlpay.api.service.AccountUtilServcie
+import com.supwisdom.dlpay.api.service.ConsumePayService
+import com.supwisdom.dlpay.api.service.TransactionService
+import com.supwisdom.dlpay.api.service.UserService
 import com.supwisdom.dlpay.exception.RequestParamCheckException
 import com.supwisdom.dlpay.exception.TransactionCheckException
 import com.supwisdom.dlpay.exception.TransactionException
-import com.supwisdom.dlpay.exception.TransactionProcessException
 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.*
-import com.supwisdom.dlpay.util.ConstantUtil
-import com.supwisdom.dlpay.util.PaytypeUtil
-import org.apache.catalina.authenticator.SpnegoAuthenticator
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
 import org.springframework.security.core.Authentication
-import org.springframework.security.core.context.SecurityContextHolder
-import org.springframework.web.bind.annotation.*
+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
 
@@ -30,10 +33,6 @@
     @Autowired
     lateinit var accountUtilServcie: AccountUtilServcie
     @Autowired
-    lateinit var personBalancePayService: PersonBalancePayService
-    @Autowired
-    lateinit var paytypeService: PaytypeService
-    @Autowired
     lateinit var userService: UserService
     @Autowired
     lateinit var systemUtilService: SystemUtilService
@@ -48,31 +47,35 @@
     /**
      * 流水结果查询统一接口
      * */
-    fun queryDtlResult(@RequestBody param: QueryDtlResultParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
+    fun queryDtlResult(@RequestBody param: QueryDtlResultParam,
+                       request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
         try {
             if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
                         .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
             }
 
-            val dtl = if (StringUtil.isEmpty(param.refno)) {
-                personBalancePayService.getUserdtlForUpdateNowait(param.refno!!)
-            } else {
-                personBalancePayService.getUserdtlByBillnoForUpdateNowait(param.billno!!, param.shopaccno!!)
-            }
-            val person = dtl.userid?.let { userService.findPersonByUserid(dtl.userid) }
-            return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .data("refno", dtl.refno)
-                    .data("amount", dtl.amount)
-                    .data("paytype", dtl.paytype)
-                    .data("payinfo", dtl.payinfo)
-                    .also {
-                        if (null != person) {
-                            it.data("name", person.name)
-                        }
-                    }
-                    .success("查询成功"))
-
+//            val dtl = if (StringUtil.isEmpty(param.refno)) {
+//                personBalancePayService.getUserdtlForUpdateNowait(param.refno!!)
+//            } else {
+//                personBalancePayService.getUserdtlByBillnoForUpdateNowait(param.billno!!, param.shopaccno!!)
+//            }
+//            val dtl = if( param.refno.isNullOrEmpty()) {
+//               transactionService.
+//            }
+//            val person = dtl.userid?.let { userService.findPersonByUserid(dtl.userid) }
+//            return ResponseEntity.ok(ResponseBodyBuilder.create()
+//                    .data("refno", dtl.refno)
+//                    .data("amount", dtl.amount)
+//                    .data("paytype", dtl.paytype)
+//                    .data("payinfo", dtl.payinfo)
+//                    .also {
+//                        if (null != person) {
+//                            it.data("name", person.name)
+//                        }
+//                    }
+//                    .success("查询成功"))
+            TODO("未实现功能")
         } catch (ex: RequestParamCheckException) {
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .requestException(ex, "请求参数错误"))
@@ -83,7 +86,8 @@
 
     }
 
-    private fun consumeMealer(param: CitizenCardPayinitParam, builder: TransactionBuilder,
+    private fun consumeMealer(@Suppress("UNUSED_PARAMETER") param: CitizenCardPayinitParam,
+                              builder: TransactionBuilder,
                               feetype: ConsumeFeetype, person: TAccount, shop: TShopacc) {
         val feetypeConfig = accountUtilServcie.readFeetype(TradeDict.FEETYPE_CONSUME_MEALER,
                 TradeDict.PAYTYPE_BALANCE)
@@ -105,7 +109,8 @@
 
     }
 
-    private fun consumeDiscount(param: CitizenCardPayinitParam, builder: TransactionBuilder,
+    private fun consumeDiscount(@Suppress("UNUSED_PARAMETER") param: CitizenCardPayinitParam,
+                                builder: TransactionBuilder,
                                 feetype: ConsumeFeetype, person: TAccount, shop: TShopacc) {
         val feetypeConfig = accountUtilServcie.readFeetype(TradeDict.FEETYPE_CONSUME_MEALER,
                 TradeDict.PAYTYPE_BALANCE)
@@ -139,7 +144,7 @@
             val person = userService.findPersonByIdentityCheckStatus(param.cardNo)
             if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_BALANCE)) {
                 val account = accountUtilServcie.readAccount(person.userid)
-                val shopacc = accountUtilServcie.readShopbyAccno(param.shopaccno)
+                val shopacc = accountUtilServcie.readShopbyShopaccno(param.shopaccno)
 
                 val builder = TransactionBuilder().apply {
                     transDate = param.transdate
@@ -209,7 +214,7 @@
             if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_CITIZEN_CARD)) {
 
                 val account = accountUtilServcie.readAccount(person.userid)
-                val shopacc = accountUtilServcie.readShopbyAccno(param.shopaccno)
+                val shopacc = accountUtilServcie.readShopbyShopaccno(param.shopaccno)
                 val subject = accountUtilServcie.readSubject(Subject.SUBJNO_PAY_CITIZEN_CARD)
                 val transaction = TransactionBuilder().apply {
                     transCode = TradeCode.TRANSCODE_CITIZENCARD_PAY
@@ -313,45 +318,45 @@
     @PostMapping("/ykt/payinit")
     fun yktPayInit(@RequestBody param: YktCardPayinitParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
         try {
-            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
-                return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-            }
-
-            val person = param.uid?.let { userService.findByThirdUniqueIdenty(it) } //没注册,可能匿名?
-            if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_YKT_CARD, person == null)) {
-                val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
-                        .chooseTradetype(Tradetype.CONSUME) //消费
-                        .also {
-                            if (null != person) it.setOwner(person)
-                        }
-                        .setTransinfo(TradeCode.TRANSCODE_YKTCARD_PAY, "一卡通支付")
-                        .setTransDatetime(param.transdate, param.transtime) //交易时间
-                        .selectPaytype(TradeDict.PAYTYPE_YKT_CARD, param.stuempno)
-                        .addDetail(AccountHolder.subject(Subject.SUBJNO_PAY_YKT),
-                                AccountHolder.shop(param.shopaccno),
-                                param.amount / 100.0, "一卡通支付")
-                        .also { builder ->
-                            param.feelist?.forEach {
-                                //fixme: 科目 -> 商户 与个人无关
-                                builder.addDetail(AccountHolder.feetype(it.feetype, TradeDict.PAYTYPE_YKT_CARD)
-                                        .with(AccountHolder.shop(param.shopaccno))
-                                        .with(AccountHolder.subject(Subject.SUBJNO_PAY_YKT))
-                                        , it.amount / 100.0)
-                            }
-                        }
-                        .addExtendParam("stuempno", param.stuempno)
-                        .addExtendParam("yktshopid", param.yktshopid ?: "")
-                        .addExtendParam("devphyid", param.devphyid ?: "")
-                        //.addExtendParam(param.extendmap)  //fixme: 保存调一卡通附加参数 (是否直接传附加参数map)
-                        .init(personBalancePayService)
-
-                return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .data("refno", dtl.refno)
-                        .data("amount", dtl.amount)
-                        .success("交易初始化成功"))
-
-            }
+//            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
+//                return ResponseEntity.ok(ResponseBodyBuilder.create()
+//                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
+//            }
+//
+//            val person = param.uid?.let { userService.findByThirdUniqueIdenty(it) } //没注册,可能匿名?
+//            if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_YKT_CARD, person == null)) {
+//                val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
+//                        .chooseTradetype(Tradetype.CONSUME) //消费
+//                        .also {
+//                            if (null != person) it.setOwner(person)
+//                        }
+//                        .setTransinfo(TradeCode.TRANSCODE_YKTCARD_PAY, "一卡通支付")
+//                        .setTransDatetime(param.transdate, param.transtime) //交易时间
+//                        .selectPaytype(TradeDict.PAYTYPE_YKT_CARD, param.stuempno)
+//                        .addDetail(AccountHolder.subject(Subject.SUBJNO_PAY_YKT),
+//                                AccountHolder.shop(param.shopaccno),
+//                                param.amount / 100.0, "一卡通支付")
+//                        .also { builder ->
+//                            param.feelist?.forEach {
+//                                //fixme: 科目 -> 商户 与个人无关
+//                                builder.addDetail(AccountHolder.feetype(it.feetype, TradeDict.PAYTYPE_YKT_CARD)
+//                                        .with(AccountHolder.shop(param.shopaccno))
+//                                        .with(AccountHolder.subject(Subject.SUBJNO_PAY_YKT))
+//                                        , it.amount / 100.0)
+//                            }
+//                        }
+//                        .addExtendParam("stuempno", param.stuempno)
+//                        .addExtendParam("yktshopid", param.yktshopid ?: "")
+//                        .addExtendParam("devphyid", param.devphyid ?: "")
+//                        //.addExtendParam(param.extendmap)  //fixme: 保存调一卡通附加参数 (是否直接传附加参数map)
+//                        .init(personBalancePayService)
+//
+//                return ResponseEntity.ok(ResponseBodyBuilder.create()
+//                        .data("refno", dtl.refno)
+//                        .data("amount", dtl.amount)
+//                        .success("交易初始化成功"))
+//
+//            }
 
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<一卡通支付>"))
@@ -377,33 +382,34 @@
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
                         .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
             }
-
-            var dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
-                    .setRefno(param.refno)
-                    .wip(personBalancePayService)
-            val extendMap = consumePayService.getUserdtlExtendParamMap(dtl.refno)
-            val code = CallService.callYktPay(consumePayService.getPaytypeConfig(TradeDict.PAYTYPE_YKT_CARD, dtl.shopaccno, dtl.userid == null),
-                    dtl, DateUtil.getNow(), extendMap["stuempno"]!!, extendMap["yktshopid"]!!, extendMap["devphyid"])
-            if (code.retcode == "0") {
-                dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
-                        .setRefno(param.refno)
-                        .addResult(code.data)
-                        .success(personBalancePayService) //流水置成功
-
-                return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .data("refno", dtl.refno)
-                        .data("billno", dtl.outtradeno)
-                        .success())
-            } else {
-                PersonTransBuilder.newBuilder(accountUtilServcie)
-                        .setRefno(param.refno)
-                        .addResult("errmsg", code.retmsg!!)
-                        .finish(personBalancePayService, TradeDict.DTL_STATUS_FAIL) //流水置成功
-
-                return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "交易扣费失败-${code.retmsg}"))
-            }
-
+//
+//            var dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
+//                    .setRefno(param.refno)
+//                    .wip(personBalancePayService)
+//            val extendMap = consumePayService.getUserdtlExtendParamMap(dtl.refno)
+//            val code = CallService.callYktPay(consumePayService.getPaytypeConfig(TradeDict.PAYTYPE_YKT_CARD, dtl.shopaccno, dtl.userid == null),
+//                    dtl, DateUtil.getNow(), extendMap["stuempno"]!!, extendMap["yktshopid"]!!, extendMap["devphyid"])
+//            if (code.retcode == "0") {
+//                dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
+//                        .setRefno(param.refno)
+//                        .addResult(code.data)
+//                        .success(personBalancePayService) //流水置成功
+//
+//                return ResponseEntity.ok(ResponseBodyBuilder.create()
+//                        .data("refno", dtl.refno)
+//                        .data("billno", dtl.outtradeno)
+//                        .success())
+//            } else {
+//                PersonTransBuilder.newBuilder(accountUtilServcie)
+//                        .setRefno(param.refno)
+//                        .addResult("errmsg", code.retmsg!!)
+//                        .finish(personBalancePayService, TradeDict.DTL_STATUS_FAIL) //流水置成功
+//
+//                return ResponseEntity.ok(ResponseBodyBuilder.create()
+//                        .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "交易扣费失败-${code.retmsg}"))
+//            }
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "交易扣费失败"))
         } catch (ex: RequestParamCheckException) {
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .requestException(ex, "请求参数错误"))
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt
index f099608..2337682 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt
@@ -1,13 +1,10 @@
 package com.supwisdom.dlpay.api.controller
 
-import com.supwisdom.dlpay.api.PersonTransBuilder
 import com.supwisdom.dlpay.api.service.AccountUtilServcie
 import com.supwisdom.dlpay.api.service.PaytypeService
-import com.supwisdom.dlpay.api.service.PersonBalancePayService
+import com.supwisdom.dlpay.api.service.TransactionService
 import com.supwisdom.dlpay.framework.util.MD5
 import com.supwisdom.dlpay.framework.util.StringUtil
-import com.supwisdom.dlpay.framework.util.TradeDict
-import com.supwisdom.dlpay.framework.util.XmlUtils
 import com.supwisdom.dlpay.util.PaytypeUtil
 import org.dom4j.io.SAXReader
 import org.slf4j.LoggerFactory
@@ -17,7 +14,7 @@
 import org.springframework.web.bind.annotation.RequestMapping
 import org.springframework.web.bind.annotation.ResponseBody
 import org.springframework.web.bind.annotation.RestController
-import java.util.HashMap
+import java.util.*
 import javax.servlet.http.HttpServletRequest
 import javax.servlet.http.HttpServletResponse
 
@@ -29,12 +26,13 @@
 class NotifyController {
     private val logger = LoggerFactory.getLogger(NotifyController::class.java)
     @Autowired
-    lateinit var personBalancePayService: PersonBalancePayService
-    @Autowired
     lateinit var paytypeService: PaytypeService
     @Autowired
     lateinit var accountUtilServcie: AccountUtilServcie
 
+    @Autowired
+    lateinit var transactionService: TransactionService
+
     @RequestMapping(value = ["/wechat"])
     @ResponseBody
     fun index(@PathVariable schema: String, request: HttpServletRequest,
@@ -82,16 +80,13 @@
             val return_code = map["return_code"]
             val result_code = map["result_code"]
             val out_trade_no = map["out_trade_no"]
-            if (StringUtils.isEmpty(out_trade_no)) {
+            if (out_trade_no == null || StringUtils.isEmpty(out_trade_no)) {
                 return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[订单信息错误]]></return_msg></xml>"
             }
             if (!StringUtils.isEmpty(return_code) && "SUCCESS" == return_code
                     && !StringUtils.isEmpty(result_code) && "SUCCESS" == result_code) {
                 //map.get("transaction_id") 第三方流水号
-                PersonTransBuilder.newBuilder(accountUtilServcie)
-                        .setRefno(out_trade_no!!)
-                        .addResult(map)
-                        .success(personBalancePayService)
+                transactionService.success(out_trade_no)
             }
             return "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"
         } catch (e: Exception) {
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/Consume_pay_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/Consume_pay_service_impl.kt
index 3c40253..8d891d8 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/Consume_pay_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/Consume_pay_service_impl.kt
@@ -3,8 +3,6 @@
 import com.supwisdom.dlpay.api.dao.PaytypeDao
 import com.supwisdom.dlpay.api.dao.ShopPaytypeConfigDao
 import com.supwisdom.dlpay.api.dao.ShopPaytypeDao
-import com.supwisdom.dlpay.api.dao.UserdtlBusinessDao
-import com.supwisdom.dlpay.api.domain.TUserdtlBusiness
 import com.supwisdom.dlpay.api.service.ConsumePayService
 import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
@@ -13,17 +11,15 @@
 import org.springframework.stereotype.Service
 
 @Service
-class ConsumePayServiceImpl: ConsumePayService{
+class ConsumePayServiceImpl : ConsumePayService {
     @Autowired
     lateinit var paytypeDao: PaytypeDao
     @Autowired
     lateinit var shopPaytypeDao: ShopPaytypeDao
     @Autowired
     lateinit var shopPaytypeConfigDao: ShopPaytypeConfigDao
-    @Autowired
-    lateinit var userdtlBusinessDao: UserdtlBusinessDao
 
-    override fun checkShopPaytype(shopaccno: String, paytype: String, anonymousflag: Boolean?): Boolean{
+    override fun checkShopPaytype(shopaccno: String, paytype: String, anonymousflag: Boolean?): Boolean {
         paytypeDao.getByPaytype(paytype).let {
             if (null == it) {
                 throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "系统不支持支付方式[$paytype]")
@@ -88,12 +84,11 @@
                 it.forEach { result.plus(mapOf(it.configid to it.configValue)) }
                 return result
             }
-        } ?: throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "该商户[$shopaccno]的支付方式[$paytype]未配置参数")
+        }
+                ?: throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "该商户[$shopaccno]的支付方式[$paytype]未配置参数")
     }
 
     override fun getUserdtlExtendParamMap(refno: String): Map<String, String> {
-        return userdtlBusinessDao.getByRefno(refno)?.let {
-            it.contentMap
-        } ?: mutableMapOf<String, String>()
+        TODO("未实现方法")
     }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt
index 6ca0003..e54f063 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt
@@ -1,30 +1,21 @@
 package com.supwisdom.dlpay.api.service.impl
 
-import com.supwisdom.dlpay.api.PersonTransBuilder
 import com.supwisdom.dlpay.api.dao.AccountDao
-import com.supwisdom.dlpay.api.dao.DebitCreditDtlDao
-import com.supwisdom.dlpay.api.dao.UserdtlBusinessDao
-import com.supwisdom.dlpay.api.dao.UserdtlDao
 import com.supwisdom.dlpay.api.domain.TAccount
-import com.supwisdom.dlpay.api.domain.TDebitCreditDtl
-import com.supwisdom.dlpay.api.domain.TUserdtl
-import com.supwisdom.dlpay.api.domain.TUserdtlBusiness
 import com.supwisdom.dlpay.api.service.AccountUtilServcie
-import com.supwisdom.dlpay.api.service.PersonBalancePayService
 import com.supwisdom.dlpay.exception.TransactionException
 import com.supwisdom.dlpay.exception.TransactionProcessException
-import com.supwisdom.dlpay.framework.dao.*
+import com.supwisdom.dlpay.framework.dao.FeetypeConfigDao
+import com.supwisdom.dlpay.framework.dao.ShopaccDao
+import com.supwisdom.dlpay.framework.dao.SubjectDao
 import com.supwisdom.dlpay.framework.domain.TFeetypeConfig
 import com.supwisdom.dlpay.framework.domain.TShopacc
 import com.supwisdom.dlpay.framework.domain.TSubject
-import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.util.*
+import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import org.hibernate.exception.LockTimeoutException
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.dao.CannotAcquireLockException
 import org.springframework.stereotype.Service
-import javax.persistence.EntityManager
-import javax.persistence.PersistenceContext
 
 
 @Service
@@ -64,9 +55,9 @@
                 ?: throw TransactionProcessException(TradeErrorCode.SHOP_NOT_EXISTS, "商户<$shopId>不存在")
     }
 
-    override fun readShopbyAccno(shopacc: String): TShopacc {
-        return shopaccDao.findByShopaccno(shopacc)
-                ?: throw TransactionProcessException(TradeErrorCode.SHOP_NOT_EXISTS, "商户<$shopacc>不存在")
+    override fun readShopbyShopaccno(shopaccno: String): TShopacc {
+        return shopaccDao.findByShopaccno(shopaccno)
+                ?: throw TransactionProcessException(TradeErrorCode.SHOP_NOT_EXISTS, "商户<$shopaccno>不存在")
     }
 
     override fun readSubject(subjno: String): TSubject {
@@ -79,262 +70,3 @@
                 ?: throw TransactionProcessException(TradeErrorCode.FEETYPE_NOT_EXISTS, "在支付方式<$paytype>下不存在费用类别<$feetype>")
     }
 }
-
-@Service
-class PersonBalancePayServiceImpl : PersonBalancePayService {
-    @Autowired
-    lateinit var userdtlDao: UserdtlDao
-    @Autowired
-    lateinit var debitCreditDtlDao: DebitCreditDtlDao
-
-    @Autowired
-    lateinit var accountDao: AccountDao
-
-    @Autowired
-    lateinit var userdtlBusinessDao: UserdtlBusinessDao
-
-    @PersistenceContext
-    lateinit var em: EntityManager
-
-    @Autowired
-    lateinit var systemUtilService: SystemUtilService
-
-
-    private fun getlockAccount(accno: String): TAccount {
-        return accountDao.getByAccnoForUpdate(accno)
-                ?: throw throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账号<$accno>不存在")
-    }
-
-    private fun getlockAccountNowait(accno: String): TAccount {
-        return try {
-            accountDao.getByAccnoForUpdateNowait(accno)
-                    ?: throw throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账号<$accno>不存在")
-        } catch (ex: Exception) {
-            when (ex) {
-                is CannotAcquireLockException, is LockTimeoutException -> throw TransactionException(TradeErrorCode.ACCOUNT_TRADE_BUSY, "账号<$accno>交易繁忙,请稍后再试")
-                else -> throw ex
-            }
-        }
-    }
-
-    private fun getLockUserdtlNowait(refno: String): TUserdtl {
-        return try {
-            userdtlDao.findByRefnoForUpdateNowait(refno)
-                    ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号<$refno>不存在")
-        } catch (ex: Exception) {
-            when (ex) {
-                is CannotAcquireLockException, is LockTimeoutException -> throw TransactionException(TradeErrorCode.LOCK_READ_TIMEOUT, "交易参考号<$refno>流水被锁定,请稍后再试")
-                else -> throw ex
-            }
-        }
-    }
-
-    private fun getLockUserdtl(refno: String): TUserdtl {
-        return userdtlDao.findByRefnoForUpdate(refno)
-                ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号<$refno>不存在")
-    }
-
-    private fun doDealAccount(accno: String, amount: Double, overdraft: Boolean): TAccount {
-        val account = getlockAccount(accno)
-        if (account.tacCheck())
-            throw TransactionProcessException(TradeErrorCode.ACCOUNT_TAC_ERROR, "账户<$accno>tac校验异常")
-
-        account.addAmount(amount) //入账
-        if (account.checkOverflow())
-            throw TransactionProcessException(TradeErrorCode.OVERFLOW_BALANCE_ERROR, "账户<$accno>已超最大余额限制")
-
-        if (!overdraft && account.checkOverdraft())
-            throw TransactionProcessException(TradeErrorCode.SHORT_BALANCE_ERROR, "账户<$accno>余额不足")
-
-        return accountDao.save(account) //入库更新
-    }
-
-    private fun doDealShopacc(shopaccno: String, amount: Double) {
-        return
-    }
-
-    override fun process(builder: PersonTransBuilder): TUserdtl {
-        return finish(init(builder), TradeDict.DTL_STATUS_SUCCESS, builder.resultMap)
-    }
-
-    override fun init(builder: PersonTransBuilder): TUserdtl {
-        //判断第三方流水号重复  标准:shopaccno + outtradeno 唯一?
-        var userdtl = userdtlDao.findByOuttradenoAndShopaccno(builder.outtradeno, builder.shopaccno) //加锁?
-        if (null != userdtl) {
-            if (TradeDict.DTL_STATUS_INIT != userdtl.status) {
-                throw TransactionProcessException(TradeErrorCode.OUTTRADENO_ALREADY_EXISTS, "外部流水号重复") //非初始化状态,直接报错
-            }
-            //fixme: 判断是同一笔交易重发(标准??)  是->已初始化直接返回;否 -> 报错:外部流水号重复
-            if (builder.amount == userdtl.amount && builder.paytype == userdtl.paytype && builder.transDate == userdtl.transdate && builder.transTime == userdtl.transtime) {
-                return userdtl // 交易日期,时间重发时是否会变??
-            } else {
-                throw TransactionProcessException(TradeErrorCode.OUTTRADENO_ALREADY_EXISTS, "外部流水号重复")
-            }
-        }
-
-        userdtl = TUserdtl() // 新建流水
-        userdtl.refno = systemUtilService.refno
-        userdtl.accdate = systemUtilService.accdate
-        userdtl.userid = builder.person.userid
-        if (StringUtil.isEmpty(builder.transDate)) {
-            userdtl.transdate = systemUtilService.sysdatetime.hostdate
-        } else {
-            userdtl.transdate = builder.transDate
-        }
-        if (StringUtil.isEmpty(builder.transTime)) {
-            userdtl.transdate = systemUtilService.sysdatetime.hosttime
-        } else {
-            userdtl.transtime = builder.transTime
-        }
-        userdtl.paytype = builder.paytype
-        userdtl.payinfo = builder.payinfo
-        userdtl.transcode = builder.transcode
-        if (StringUtil.isEmpty(builder.description)) {
-            userdtl.transdesc = systemUtilService.getTranscodeName(builder.transcode, null)
-        } else {
-            userdtl.transdesc = builder.description
-        }
-        userdtl.outtradeno = builder.outtradeno
-        userdtl.shopaccno = builder.shopaccno
-//        userdtl.operid =
-        when (builder.tradetype) {
-            Tradetype.RECHARGE -> userdtl.tradeflag = 1
-            Tradetype.CONSUME -> userdtl.tradeflag = 2
-        }
-        userdtl.createtime = systemUtilService.sysdatetime.hostdatetime
-
-        userdtl.amount = builder.amount
-        userdtl.status = TradeDict.DTL_STATUS_INIT
-        userdtlDao.save(userdtl)
-
-        builder.details.forEach {
-            TDebitCreditDtl().apply {
-                refno = userdtl.refno
-                seqno = it.rowno
-                drsubjno = it.debitSubjNo
-                draccno = it.debitAccNo
-                crsubjno = it.creditSubjNo
-                craccno = it.creditAccNo
-                amount = it.amount
-                summary = it.summary
-                debitCreditDtlDao.save(this)
-            }
-        }
-
-        if (builder.extendMap.isNotEmpty()) {
-            userdtlBusinessDao.save(TUserdtlBusiness(userdtl.refno, builder.extendMap)) //保存参数
-        }
-
-        return userdtl
-    }
-
-    override fun finish(paydtl: TUserdtl, status: String, businessData: Map<String, String>?): TUserdtl {
-        return finish(paydtl.refno, status, businessData)
-    }
-
-    private fun fail(userdtl: TUserdtl, businessData: Map<String, String>?) {
-        //失败
-        if (TradeDict.DTL_STATUS_SUCCESS == userdtl.status)
-            throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "流水已经交易成功")
-        userdtl.status = TradeDict.DTL_STATUS_FAIL
-        userdtl.endtime = systemUtilService.sysdatetime.hostdatetime
-        userdtl.remark = businessData?.get("errmsg")
-        userdtlDao.save(userdtl)
-    }
-
-    private fun success(userdtl: TUserdtl, businessData: Map<String, String>?) {
-        if (TradeDict.DTL_STATUS_SUCCESS == userdtl.status) {
-            return
-        }
-        //TODO 校验已经成功的流水,不重复入账
-        debitCreditDtlDao.findByRefno(userdtl.refno).forEach { detail ->
-            //个人账户入账
-            if (Subject.SUBJNO_PERSONAL_DEPOSIT == detail.drsubjno) {
-                doDealAccount(detail.draccno, -1 * detail.amount, false) //借方消费
-            }
-            if (Subject.SUBJNO_PERSONAL_DEPOSIT == detail.crsubjno) {
-                doDealAccount(detail.craccno, detail.amount, false) //贷方充值
-            }
-
-            //商户入账
-            if (Subject.SUBJNO_MACHANT_INCOME == detail.drsubjno) {
-                doDealShopacc(detail.draccno, -1 * detail.amount)
-            }
-            if (Subject.SUBJNO_MACHANT_INCOME == detail.crsubjno) {
-                doDealShopacc(detail.craccno, detail.amount)
-            }
-        }
-
-        userdtl.status = TradeDict.DTL_STATUS_SUCCESS
-        userdtl.accdate = systemUtilService.accdate //入账成功时更新
-        userdtl.endtime = systemUtilService.sysdatetime.hostdatetime
-        //TODO 存储一些业务参数
-        userdtlDao.save(userdtl)
-    }
-
-    override fun finish(refno: String, status: String, businessData: Map<String, String>?): TUserdtl {
-        val userdtl = getLockUserdtl(refno)
-        return when (status) {
-            TradeDict.DTL_STATUS_FAIL -> {
-                fail(userdtl, businessData)
-                userdtl
-            }
-            TradeDict.DTL_STATUS_SUCCESS -> {
-                //成功
-                success(userdtl, businessData)
-                userdtl
-            }
-            else -> throw TransactionProcessException(TradeErrorCode.TRANSDTL_STATUS_ERROR, "未指定明确的交易结束状态")
-        }
-    }
-
-    override fun wip(paydtl: TUserdtl): TUserdtl {
-        return wip(paydtl.refno)
-    }
-
-    override fun wip(refno: String): TUserdtl {
-        val userdtl = getLockUserdtlNowait(refno)
-        if (TradeDict.DTL_STATUS_WIP == userdtl.status) {
-            return userdtl
-        }
-
-        if (TradeDict.DTL_STATUS_INIT != userdtl.status) {
-            throw TransactionProcessException(TradeErrorCode.TRANSDTL_STATUS_NOT_INIT,
-                    "交易参考号<$refno>非初始化流水")
-        }
-        userdtl.status = TradeDict.DTL_STATUS_WIP  //待支付
-        return userdtlDao.save(userdtl)
-    }
-
-    override fun wip(builder: PersonTransBuilder): TUserdtl {
-        return wip(builder.refno)
-    }
-
-    override fun finish(builder: PersonTransBuilder): TUserdtl {
-        return finish(builder.refno, builder.status, builder.resultMap)
-    }
-
-    override fun getUserdtlForUpdateNowait(refno: String): TUserdtl {
-        return try {
-            userdtlDao.findByRefnoForUpdateNowait(refno)
-                    ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "交易参考号<$refno>流水不存在")
-        } catch (ex: Exception) {
-            when (ex) {
-                is CannotAcquireLockException, is LockTimeoutException -> throw TransactionException(TradeErrorCode.ACCOUNT_TRADE_BUSY, "流水<$refno>被锁定,请稍后再试")
-                else -> throw ex
-            }
-        }
-    }
-
-    override fun getUserdtlByBillnoForUpdateNowait(billno: String, shopaccno: String): TUserdtl {
-        return try {
-            userdtlDao.findByBillnoForUpdateNowait(billno, shopaccno)
-                    ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "商户流水号<$billno>流水不存在")
-        } catch (ex: Exception) {
-            when (ex) {
-                is CannotAcquireLockException, is LockTimeoutException -> throw TransactionException(TradeErrorCode.ACCOUNT_TRADE_BUSY, "商户流水号<$billno>流水被锁定,请稍后再试")
-                else -> throw ex
-            }
-        }
-    }
-}
\ No newline at end of file
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 4e355cf..ac98e14 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
@@ -384,6 +384,7 @@
             throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "流水<$refno>状态错误")
         }
         transaction.status = TradeDict.DTL_STATUS_SUCCESS
+        transaction.accdate = systemUtilService.accdate
         if (transaction.person) {
             // update account balance
             transaction.personDtl?.let {
@@ -391,6 +392,7 @@
                     throw TransactionProcessException(TradeErrorCode.ACCOUNT_TRADE_BUSY,
                             "个人账户交易冲突")
                 }
+                transaction.personDtl.accdate = transaction.accdate
             } ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS,
                     "个人流水<${transaction.refno}>不存在")
             transaction.personDtl.status = TradeDict.DTL_STATUS_SUCCESS
@@ -405,6 +407,7 @@
             } ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS,
                     "商户流水<${transaction.refno}>不存在")
             transaction.shopDtl.status = TradeDict.DTL_STATUS_SUCCESS
+            transaction.shopDtl.accdate = transaction.accdate
         }
 
         if (transaction.subject) {
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/pay_service.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/pay_service.kt
index ba07cda..f10c1a3 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/pay_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/pay_service.kt
@@ -1,12 +1,9 @@
 package com.supwisdom.dlpay.api.service
 
-import com.supwisdom.dlpay.api.PersonTransBuilder
 import com.supwisdom.dlpay.api.domain.TAccount
-import com.supwisdom.dlpay.api.domain.TUserdtl
 import com.supwisdom.dlpay.framework.domain.TFeetypeConfig
 import com.supwisdom.dlpay.framework.domain.TShopacc
 import com.supwisdom.dlpay.framework.domain.TSubject
-import com.supwisdom.dlpay.framework.domain.TTranstype
 import org.springframework.transaction.annotation.Propagation
 import org.springframework.transaction.annotation.Transactional
 
@@ -20,56 +17,9 @@
 
     fun readShopAcc(shopId: Int): TShopacc
 
-    fun readShopbyAccno(shpoacc: String): TShopacc
+    fun readShopbyShopaccno(shopaccno: String): TShopacc
 
     fun readSubject(subjno: String): TSubject
 
     fun readFeetype(feetype: String, paytype: String): TFeetypeConfig
 }
-
-interface PersonBalancePayService {
-
-    /**
-     * 一步完成交易
-     */
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun process(builder: PersonTransBuilder): TUserdtl
-
-    /**
-     * 两步交易,交易初始化方法,检查交易参数,记录交易流水
-     */
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun init(builder: PersonTransBuilder): TUserdtl
-
-    /**
-     * 两步交易,完成交易过程,包括更新交易状态(成功、失败),更新借贷双方余额
-     */
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun finish(paydtl: TUserdtl, status: String, businessData: Map<String, String>?): TUserdtl
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun finish(refno: String, status: String, businessData: Map<String, String>?): TUserdtl
-
-    /**
-     * 两步交易,交易过程中判断交易状态,并更新交易状态为 wip
-     * 如果交易记录被锁,立刻抛出异常
-     * @throws TransactionProcessException
-     */
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun wip(paydtl: TUserdtl): TUserdtl
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun wip(refno: String): TUserdtl
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun wip(builder: PersonTransBuilder): TUserdtl
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun finish(builder: PersonTransBuilder): TUserdtl
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun getUserdtlForUpdateNowait(refno: String): TUserdtl
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun getUserdtlByBillnoForUpdateNowait(billno: String, shopaccno: String): TUserdtl
-}
\ No newline at end of file