feat: 增加线下充值接口
diff --git a/build.gradle b/build.gradle
index 3bf4e38..ee3f503 100644
--- a/build.gradle
+++ b/build.gradle
@@ -41,9 +41,10 @@
         }
     }
 
-    version = gitVersion()
+    version = '1'
     ext {
         details = versionDetails()
+        buildVersion = gitVersion()
     }
 }
 
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CommonRechargeInitParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CommonRechargeInitParam.java
index 39099d2..5fb3b54 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CommonRechargeInitParam.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CommonRechargeInitParam.java
@@ -2,6 +2,8 @@
 
 import com.supwisdom.dlpay.api.APIRequestParam;
 import com.supwisdom.dlpay.api.annotation.Sign;
+import com.supwisdom.dlpay.api.annotation.TransDate;
+import com.supwisdom.dlpay.api.annotation.TransTime;
 import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
 import com.supwisdom.dlpay.api.util.DateUtil;
 import lombok.Getter;
@@ -36,9 +38,12 @@
 
   @Sign
   @NotNull(message = "交易日期不能为空")
+  @TransDate(message = "交易日期格式不合法")
   private String transdate;
+
   @Sign
   @NotNull(message = "交易时间不能为空")
+  @TransTime(message = "交易时间格式不合法")
   private String transtime;
 
   @Override
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/MerchantDepositParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/MerchantDepositParam.java
new file mode 100644
index 0000000..b19a63a
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/MerchantDepositParam.java
@@ -0,0 +1,132 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.supwisdom.dlpay.api.APIRequestParam;
+import com.supwisdom.dlpay.api.annotation.TransDate;
+import com.supwisdom.dlpay.api.annotation.TransTime;
+import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+public class MerchantDepositParam extends APIRequestParam {
+  private String userid;
+  private String custcode;
+
+  @NotNull(message = "客户端流水号不能为空")
+  private String billno;
+
+  @NotNull(message = "资金类型不能为空")
+  private String capitalType;
+
+  @NotNull(message = "充值金额不能为空")
+  @Min(value = 1L, message = "充值金额不能小于等于0")
+  private Integer depositAmount;
+
+  @NotNull(message = "操作员")
+  private String opercode;
+
+  private String refno;
+
+  @TransDate
+  private String localDate;
+  @TransTime
+  private String localTime;
+
+  @NotNull(message = "商户号不能为空")
+  private String merchant;
+
+  private String desc;
+
+  public String getUserid() {
+    return userid;
+  }
+
+  public void setUserid(String userid) {
+    this.userid = userid;
+  }
+
+  public String getCustcode() {
+    return custcode;
+  }
+
+  public void setCustcode(String custcode) {
+    this.custcode = custcode;
+  }
+
+  public String getBillno() {
+    return billno;
+  }
+
+  public void setBillno(String billno) {
+    this.billno = billno;
+  }
+
+  public String getCapitalType() {
+    return capitalType;
+  }
+
+  public void setCapitalType(String capitalType) {
+    this.capitalType = capitalType;
+  }
+
+  public Integer getDepositAmount() {
+    return depositAmount;
+  }
+
+  public void setDepositAmount(Integer depositAmount) {
+    this.depositAmount = depositAmount;
+  }
+
+  public String getLocalDate() {
+    return localDate;
+  }
+
+  public void setLocalDate(String localDate) {
+    this.localDate = localDate;
+  }
+
+  public String getLocalTime() {
+    return localTime;
+  }
+
+  public void setLocalTime(String localTime) {
+    this.localTime = localTime;
+  }
+
+  public String getMerchant() {
+    return merchant;
+  }
+
+  public void setMerchant(String merchant) {
+    this.merchant = merchant;
+  }
+
+  public String getDesc() {
+    return desc;
+  }
+
+  public void setDesc(String desc) {
+    this.desc = desc;
+  }
+
+  public String getOpercode() {
+    return opercode;
+  }
+
+  public void setOpercode(String opercode) {
+    this.opercode = opercode;
+  }
+
+  public String getRefno() {
+    return refno;
+  }
+
+  public void setRefno(String refno) {
+    this.refno = refno;
+  }
+
+  @Override
+  public boolean checkParam() throws RequestParamCheckException {
+    return true;
+  }
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/MerchantDepositResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/MerchantDepositResponse.java
new file mode 100644
index 0000000..c54ffe4
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/MerchantDepositResponse.java
@@ -0,0 +1,43 @@
+package com.supwisdom.dlpay.api.bean;
+
+public class MerchantDepositResponse extends ApiResponse {
+  private String refno;
+
+  private Integer depositAmount;
+
+  private Integer extraAmount;
+
+  private String summary;
+
+  public String getRefno() {
+    return refno;
+  }
+
+  public void setRefno(String refno) {
+    this.refno = refno;
+  }
+
+  public Integer getDepositAmount() {
+    return depositAmount;
+  }
+
+  public void setDepositAmount(Integer depositAmount) {
+    this.depositAmount = depositAmount;
+  }
+
+  public Integer getExtraAmount() {
+    return extraAmount;
+  }
+
+  public void setExtraAmount(Integer extraAmount) {
+    this.extraAmount = extraAmount;
+  }
+
+  public String getSummary() {
+    return summary;
+  }
+
+  public void setSummary(String summary) {
+    this.summary = summary;
+  }
+}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/TransactionProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/TransactionProxy.java
index 570587a..712fcd3 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/TransactionProxy.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/TransactionProxy.java
@@ -15,4 +15,10 @@
 
   @PostMapping("/api/consume/queryresult")
   QueryTransDtlResponse queryDtlResult(@RequestBody QueryDtlResultParam param);
+
+  @PostMapping("/api/deposit/merchant/init")
+  MerchantDepositResponse depositInit(@RequestBody MerchantDepositParam param);
+
+  @PostMapping("/api/deposit/merchant/confirm")
+  MerchantDepositResponse depositConfirm(@RequestBody MerchantDepositParam param);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/DepositCapitalTypeDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/DepositCapitalTypeDao.java
new file mode 100644
index 0000000..e6a0b58
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/DepositCapitalTypeDao.java
@@ -0,0 +1,13 @@
+package com.supwisdom.dlpay.api.dao;
+
+import com.supwisdom.dlpay.api.domain.TDepositCapitalType;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface DepositCapitalTypeDao extends JpaRepository<TDepositCapitalType, Integer> {
+
+  TDepositCapitalType findTDepositCapitalTypeByCodeAndTenantid(String code, String tenantid);
+
+  List<TDepositCapitalType> findTDepositCapitalTypesByTenantid(String tenantid);
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TDepositCapitalType.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TDepositCapitalType.java
new file mode 100644
index 0000000..90a3334
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TDepositCapitalType.java
@@ -0,0 +1,94 @@
+package com.supwisdom.dlpay.api.domain;
+
+import javax.persistence.*;
+
+import static javax.persistence.FetchType.LAZY;
+
+@Table(name = "TB_DEPOSIT_CAPITAL_TYPE",
+    indexes = {@Index(name = "deposit_capital_type_idx", columnList = "code, tenantid", unique = true)})
+@Entity
+@SequenceGenerator(name = "deposit_capital_type_seq", initialValue = 50)
+public class TDepositCapitalType {
+
+  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "deposit_capital_type_seq")
+  private Integer id;
+
+  @Column(name = "code", length = 20)
+  private String code;
+
+  @Column(name = "capital", length = 100)
+  private String capital;
+
+  @Column(name = "subjno", length = 20)
+  private String subjno;
+
+  @Column(name = "sourcetypecode", length = 32)
+  private String sourceTypeCode;
+
+  @OneToOne(targetEntity = TSourceType.class, fetch = LAZY, cascade = CascadeType.ALL)
+  @JoinColumns({
+      @JoinColumn(name = "sourcetypecode", referencedColumnName = "SOURCETYPE"),
+      @JoinColumn(name = "tenantid", referencedColumnName = "tenantid")
+  })
+  private TSourceType sourceType;
+
+  @Column(name = "tenantid", length = 20)
+  private String tenantid;
+
+  public Integer getId() {
+    return id;
+  }
+
+  public void setId(Integer id) {
+    this.id = id;
+  }
+
+  public String getCode() {
+    return code;
+  }
+
+  public void setCode(String code) {
+    this.code = code;
+  }
+
+  public String getCapital() {
+    return capital;
+  }
+
+  public void setCapital(String capital) {
+    this.capital = capital;
+  }
+
+  public String getSubjno() {
+    return subjno;
+  }
+
+  public void setSubjno(String subjno) {
+    this.subjno = subjno;
+  }
+
+  public String getTenantid() {
+    return tenantid;
+  }
+
+
+  public void setTenantid(String tenantid) {
+    this.tenantid = tenantid;
+  }
+
+  public String getSourceTypeCode() {
+    return sourceTypeCode;
+  }
+
+  public void setSourceTypeCode(String sourceTypeCode) {
+    this.sourceTypeCode = sourceTypeCode;
+  }
+
+  public TSourceType getSourceType() {
+    return sourceType;
+  }
+
+  public void setSourceType(TSourceType sourceType) {
+    this.sourceType = sourceType;
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java
index d1a85b8..8298977 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java
@@ -32,4 +32,6 @@
 
   public static final int TRANSCODE_CARD_BIZ = 1007; // 卡务业务
 
+  public static final int TRANSCODE_MERCHANT_DEPOSIT = 3600;
+
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
index 9c2162f..d82ded4 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
@@ -88,6 +88,8 @@
   public static final String PAYTYPE_SM = "SM"; //SM内支付
 
   public static final String SOURCETYPE_DEFAULT = "thirduid"; //第三方id默认
+  public static final String SOURCETYPE_INTERNAL = "internal"; //内部资金类型
+  public static final String SOURCETYPE_EXTERNAL = "external"; //外部资金
   /**
    * feetype
    * - 消费:折扣、搭伙费(管理费)
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt
index da8c986..968dab2 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt
@@ -3,11 +3,13 @@
 import com.supwisdom.dlpay.api.AccountProxy
 import com.supwisdom.dlpay.api.TransactionBuilder
 import com.supwisdom.dlpay.api.bean.*
-import com.supwisdom.dlpay.api.service.*
+import com.supwisdom.dlpay.api.service.AccountUtilServcie
+import com.supwisdom.dlpay.api.service.ChargeApiService
+import com.supwisdom.dlpay.api.service.TransactionServiceProxy
+import com.supwisdom.dlpay.api.service.UserService
 import com.supwisdom.dlpay.exception.TransactionCheckException
 import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
-import com.supwisdom.dlpay.framework.service.CommonService
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.Subject
 import com.supwisdom.dlpay.framework.util.TradeCode
@@ -20,9 +22,10 @@
 import org.springframework.web.bind.annotation.RequestBody
 import org.springframework.web.bind.annotation.RequestMapping
 import org.springframework.web.bind.annotation.RestController
+import javax.validation.Valid
 
 @RestController
-@RequestMapping("/api/recharge")
+@RequestMapping("/api/deposit")
 class ChargeAPIController {
     @Autowired
     lateinit var accountUtilServcie: AccountUtilServcie
@@ -31,8 +34,6 @@
     @Autowired
     lateinit var transactionService: TransactionServiceProxy
     @Autowired
-    lateinit var commonService: CommonService
-    @Autowired
     lateinit var userService: UserService
     @Autowired
     lateinit var chargeApiService: ChargeApiService
@@ -141,4 +142,75 @@
 
     }
 
+    @PostMapping("/merchant/init")
+    fun merchantDepositInit(@RequestBody @Valid param: MerchantDepositParam, auth: Authentication):
+            ResponseEntity<Any> {
+        val response = MerchantDepositResponse()
+        val account = when {
+            param.userid.isNotBlank() -> {
+                accountUtilServcie.readAccount(param.userid)
+            }
+            param.custcode.isNotBlank() -> {
+                TODO("not implementation")
+            }
+            else -> {
+                return ResponseBodyBuilder.failEntity(response, TradeErrorCode.INPUT_DATA_ERROR,
+                        "用户ID不能为空")
+            }
+        }
+
+        val shopacc = accountUtilServcie.readShopbyShopaccno(param.merchant)
+
+        val capitalType = chargeApiService.getDepositCapital(param.capitalType)
+
+        val subject = accountUtilServcie.readSubject(capitalType.subjno)
+
+        val builder = TransactionBuilder().apply {
+            setTransInfo(param.localDate, param.localTime,
+                    TradeCode.TRANSCODE_MERCHANT_DEPOSIT,
+                    capitalType.sourceTypeCode)
+            setOutTransInfo(auth.principal.toString(), param.billno)
+            dtltype = "deposit"
+            if (param.opercode.isNotBlank()) {
+                operator(param.opercode, TradeDict.OPERTYPE_SHOP)
+            } else {
+                operator(param.merchant, TradeDict.OPERTYPE_SHOP)
+            }
+        }.person(account).apply {
+            setAmount(param.depositAmount / 100.0, TradeDict.TRADE_FLAG_IN)
+            setOpposite(shopacc.shopaccno, shopacc.shopname)
+        }.and().shop(shopacc).apply {
+            setAmount(param.depositAmount / 100.0, TradeDict.TRADE_FLAG_OUT)
+            setOpposite(account.accno, account.accname)
+        }.and()
+                .addDebitCreditRecord(subject.subjno, subject.subjname,
+                        shopacc.shopaccno, shopacc.shopname, param.depositAmount / 100.0,
+                        capitalType.capital + "充值")
+                .addDebitCreditRecord(shopacc.shopaccno, shopacc.shopname,
+                        account.accno, account.accname, param.depositAmount / 100.0,
+                        capitalType.capital + "充值")
+
+        val transaction = builder.init(transactionService)
+        response.apply {
+            refno = transaction.refno
+            summary = transaction.shopDtl.transdesc
+            depositAmount = Math.round(transaction.personDtl.amount * 100) as Int
+            extraAmount = 0
+        }
+        return ResponseBodyBuilder.successEntity(response, "充值初始化成功")
+    }
+
+    @PostMapping("/merchant/confirm")
+    fun merchantDepositConfirm(@RequestBody @Valid param: MerchantDepositParam, auth: Authentication):
+            ResponseEntity<Any> {
+        val response = MerchantDepositResponse()
+        val transaction = transactionService.success(param.refno)
+        response.apply {
+            refno = transaction.refno
+            summary = transaction.shopDtl.transdesc
+            depositAmount = Math.round(transaction.personDtl.amount * 100) as Int
+            extraAmount = 0
+        }
+        return ResponseBodyBuilder.successEntity(response, "充值成功")
+    }
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/charge_api_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/charge_api_service.kt
index 2ac22fb..9d737de 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/charge_api_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/charge_api_service.kt
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.api.service
 
+import com.supwisdom.dlpay.api.domain.TDepositCapitalType
 import com.supwisdom.dlpay.api.domain.TPersondtl
 import com.supwisdom.dlpay.api.domain.TTransactionMain
 import org.springframework.transaction.annotation.Propagation
@@ -14,4 +15,7 @@
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class], readOnly = true)
     fun getPersonDtl(refno: String): TPersondtl
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class], readOnly = true)
+    fun getDepositCapital(capital: String): TDepositCapitalType
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/charge_api_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/charge_api_service_impl.kt
index d76880f..f08607d 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/charge_api_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/charge_api_service_impl.kt
@@ -1,11 +1,14 @@
 package com.supwisdom.dlpay.api.service.impl
 
+import com.supwisdom.dlpay.api.dao.DepositCapitalTypeDao
 import com.supwisdom.dlpay.api.dao.PersondtlDao
 import com.supwisdom.dlpay.api.dao.TransactionMainDao
+import com.supwisdom.dlpay.api.domain.TDepositCapitalType
 import com.supwisdom.dlpay.api.domain.TPersondtl
 import com.supwisdom.dlpay.api.domain.TTransactionMain
 import com.supwisdom.dlpay.api.service.ChargeApiService
 import com.supwisdom.dlpay.api.service.SourceTypeService
+import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.framework.util.StringUtil
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
@@ -19,6 +22,9 @@
     @Autowired
     lateinit var persondtlDao: PersondtlDao
 
+    @Autowired
+    lateinit var depositCapitalTypeDao: DepositCapitalTypeDao
+
     override fun checkRechargeSourcetype(sourceType: String): Boolean {
         return sourceTypeService.checkRechargeSourcetype(sourceType)
     }
@@ -30,7 +36,11 @@
         }
     }
 
-    override fun getPersonDtl(refno: String): TPersondtl{
+    override fun getPersonDtl(refno: String): TPersondtl {
         return persondtlDao.getOne(refno)
     }
+
+    override fun getDepositCapital(capital: String): TDepositCapitalType {
+        return depositCapitalTypeDao.findTDepositCapitalTypeByCodeAndTenantid(capital, TenantContext.getTenantSchema());
+    }
 }
\ No newline at end of file
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index 7244bf3..2e5119a 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -560,6 +560,46 @@
 VALUES ('28EE54CD3B044CC197D6C5B0E309F8B8', 'alipay', 't', '支付宝', 't', 't', 't', 't', 'f', '112230','112210', 1, '103000', '{tenantid}');
 INSERT INTO "tb_sourcetype" ("sourcetype_id", "sourcetype", "checkable", "paydesc", "enable", "charge_enable", "consume_enable", "anonymous_enable", "reversable", "pay_subjno", "deposite_subjno", "tplusn", "start_chktime", "tenantid")
 VALUES ('DAEF88B54B684347B2B83940C38C7671', 'wechat', 't', '微信支付', 't', 't', 't', 't', 'f', '112231','112211', 1, '103000', '{tenantid}');
+INSERT INTO "tb_sourcetype" ("sourcetype_id", "sourcetype", "checkable", "paydesc", "enable", "charge_enable", "consume_enable", "anonymous_enable", "reversable", "pay_subjno", "deposite_subjno", "tplusn", "start_chktime", "tenantid")
+VALUES ('8f86d7c37dd813b8141057c2dbd93250', 'internal', 't', '内部资金', 't', 't', 't', 't', 'f', '','', 1, '', '{tenantid}');
+INSERT INTO "tb_sourcetype" ("sourcetype_id", "sourcetype", "checkable", "paydesc", "enable", "charge_enable", "consume_enable", "anonymous_enable", "reversable", "pay_subjno", "deposite_subjno", "tplusn", "start_chktime", "tenantid")
+VALUES ('52d23e8b38221b15f989af1b910cc104', 'external', 't', '外部资金', 't', 't', 't', 't', 'f', '','', 1, '', '{tenantid}');
+
+INSERT INTO TB_DEPOSIT_CAPITAL_TYPE(ID, CODE, CAPITAL, SUBJNO, SOURCETYPECODE, TENANTID)
+VALUES(1, 'cash', '现金', '1001', 'external', '{tenantid}');
+
+INSERT INTO TB_DEPOSIT_CAPITAL_TYPE(ID, CODE, CAPITAL, SUBJNO, SOURCETYPECODE, TENANTID)
+VALUES(2, 'cheque', '支票', '112101', 'external', '{tenantid}');
+
+INSERT INTO TB_DEPOSIT_CAPITAL_TYPE(ID, CODE, CAPITAL, SUBJNO, SOURCETYPECODE, TENANTID)
+VALUES(3, 'voucher', '经费本', '112102', 'external', '{tenantid}');
+
+INSERT INTO TB_DEPOSIT_CAPITAL_TYPE(ID, CODE, CAPITAL, SUBJNO, SOURCETYPECODE, TENANTID)
+VALUES(4, 'wanxiao.weichat', '完美校园微信', '112209', 'external', '{tenantid}');
+
+INSERT INTO TB_DEPOSIT_CAPITAL_TYPE(ID, CODE, CAPITAL, SUBJNO, SOURCETYPECODE, TENANTID)
+VALUES(5, 'wanxiao.alipay', '完美校园支付宝', '112209', 'external', '{tenantid}');
+
+INSERT INTO TB_DEPOSIT_CAPITAL_TYPE(ID, CODE, CAPITAL, SUBJNO, SOURCETYPECODE, TENANTID)
+VALUES(6, 'wanxiao.ccb', '完美校园建设银行', '112209', 'external', '{tenantid}');
+
+INSERT INTO TB_DEPOSIT_CAPITAL_TYPE(ID, CODE, CAPITAL, SUBJNO, SOURCETYPECODE, TENANTID)
+VALUES(7, 'wanxiao.icbc', '完美校园工商银行', '112209', 'external', '{tenantid}');
+
+INSERT INTO TB_DEPOSIT_CAPITAL_TYPE(ID, CODE, CAPITAL, SUBJNO, SOURCETYPECODE, TENANTID)
+VALUES(8, 'wanxiao.boc', '完美校园中国银行', '112209', 'external', '{tenantid}');
+
+INSERT INTO TB_DEPOSIT_CAPITAL_TYPE(ID, CODE, CAPITAL, SUBJNO, SOURCETYPECODE, TENANTID)
+VALUES(9, 'wanxiao.abc', '完美校园农业银行', '112209', 'external', '{tenantid}');
+
+INSERT INTO TB_DEPOSIT_CAPITAL_TYPE(ID, CODE, CAPITAL, SUBJNO, SOURCETYPECODE, TENANTID)
+VALUES(10, 'weichat', '微信', '112211', 'external', '{tenantid}');
+
+INSERT INTO TB_DEPOSIT_CAPITAL_TYPE(ID, CODE, CAPITAL, SUBJNO, SOURCETYPECODE, TENANTID)
+VALUES(11, 'alipay', '支付宝', '112210', 'external', '{tenantid}');
+
+INSERT INTO TB_DEPOSIT_CAPITAL_TYPE(ID, CODE, CAPITAL, SUBJNO, SOURCETYPECODE, TENANTID)
+VALUES(12, 'unionpay', '银联', '112212', 'external', '{tenantid}');
 
 -- 支付方式
 INSERT INTO TB_SOURCETYPE_CONFIG (ID, SOURCETYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
diff --git a/payapi/src/test/kotlin/com/supwisdom/dlpay/transaction_service_test.kt b/payapi/src/test/kotlin/com/supwisdom/dlpay/transaction_service_test.kt
index cfacc16..4329c70 100644
--- a/payapi/src/test/kotlin/com/supwisdom/dlpay/transaction_service_test.kt
+++ b/payapi/src/test/kotlin/com/supwisdom/dlpay/transaction_service_test.kt
@@ -83,7 +83,7 @@
     }
 
     @Test
-    fun testTransaction() {
+    fun `transation init success`() {
         val builder = TransactionBuilder()
         val person = testAccount()
         val shop = testShop()
@@ -127,5 +127,9 @@
         verify(exactly = 1) { systemUtilService.refno }
         verify(atLeast = 1) { systemUtilService.accdate }
         verify(exactly = 1) { sourceTypeService.getBySourceType(builder.sourceType) }
+
+        every { transactionMainDao.findByRefnoForUpdate(transaction.refno) } returns transaction
+        val trans2 = transactionService.success(transaction.refno)
+        assertThat(trans2.status, equalTo(TradeDict.DTL_STATUS_SUCCESS))
     }
 }
\ No newline at end of file